【问题标题】:How cJSON parse the json array?cJSON如何解析json数组?
【发布时间】:2019-01-29 09:48:26
【问题描述】:

我有一个关于 C 解析 json 数组的问题,我知道 cJSON 如何解析 json 使用 C,但是我在 Google 中找不到任何关于如何解析 json 数组的结果,我看过 Using cJSON to read in a JSON array ,但它不适合我。

我从 Web API 接收到一个 json 数组,它看起来像这样:

[{\"id\":\"25139\",\"date\":\"2016-10-27\",\"name\":\"Komfy Switch With Camera DKZ-201S\\/W Password Disclosure\"},{\"id\":\"25117\",\"date\":\"2016-10-24\",\"name\":\"NETDOIT weak password Vulnerability\"}]

如您所见,一个数组中有很多 json,那么,如何使用 cJSON lib 解析数组?

【问题讨论】:

  • 您的样本不是有效的 JSON。基本上,他所有的反斜杠都是无效的。这是从调试器复制出来的神器,它显示带有 C 样式转义的字符串?
  • 是的,你说得对,我是从gdb复制的,当我使用curl下载数据时,没有“\”,是这样的:
  • [{"id":"6792","date":"2010-01-29","name":"Discuz! 6.0.0 跨站脚本"},{"id" :"7570","date":"2009-09-17","name":"Discuz! Plugin Crazy Star
  • 希望对您有所帮助,github.com/ajithcofficial/ajson

标签: c json cjson


【解决方案1】:

cJSON 支持全部范围,即 JSON 数组和对象。访问数据时,只需要了解当前片断是什么类型即可。

在您的情况下,它是一个包含包含简单值的对象的数组。所以这就是你的处理方式:

int i;
cJSON *elem;
cJSON *name;
char *json_string = "[{\"id\":\"25139\",\"date\":\"2016-10-27\",\"name\":\"Komfy Switch With Camera DKZ-201S\\/W Password Disclosure\"},{\"id\":\"25117\",\"date\":\"2016-10-24\",\"name\":\"NETDOIT weak password Vulnerability\"}]";
cJSON *root = cJSON_Parse(my_json_string);
int n = cJSON_GetArraySize(root);
for (i = 0; i < n; i++) {
    elem = cJSON_GetArrayItem(root, i);
    name = cJSON_GetObjectItem(elem, "name");
    printf("%s\n", name->valuestring);
}

我还没有编译它。我希望它不会太远。

【讨论】:

  • 谢谢你,你的解决方案让我豁然开朗,顿时明白了,非常感谢。
猜你喜欢
  • 2014-06-15
  • 2015-09-06
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多