C:如何解析Json请求中的值?

时间:2016-07-18 06:24:31

标签: c json json-rpc cjson

我正在尝试使用由Dave Gamble编写的cJSON库来读取以下JSON请求:

       {"id":"8358441244995838759","jsonrpc":"2.0","method":"addext",
       "params":["<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
        <trunks id=\"0\"><end_ch>3</end_ch>
        <gateway>172.20.222.52</gateway>
        <interface_type>E231</interface_type>
        <name>Mumbai_Avaya</name>
        <start_ch>12</start_ch>
        <sub_type>E1PRI</sub_type></trunks>"]}

我能够检索&#34; id&#34;和&#34;方法&#34;通过使用下面的代码,但无法检索或打印内部的值&#34; params&#34;这是一个XML字符串。 我想打印&#34; params&#34;。

内的任何内容
 cJSON *cjson, *method_obj;
 char *methodname;
 char *params;

 cjson = cJSON_Parse(buf);

method_obj = cJSON_GetObjectItem(cjson, "method");
methodname = method_obj->valuestring;
printf("method name %s\n", methodname);

method_obj = cJSON_GetObjectItem(cjson, "id");
id = method_obj->valueint;
char *str = method_obj->valuestring;
printf("id %s\n", str);

method_obj = cJSON_GetObjectItem(cjson, "params");
params=method_obj->valuestring;
printf("Params [ ] %s\n", params);

请提供任何建议。

先谢谢。

2 个答案:

答案 0 :(得分:0)

method_obj->valuestring更改为method_obj->child->valuestring(在检查child != NULL之后)或拥有生成JSON请求的服务,如果不需要,则不使用数组。

答案 1 :(得分:0)

字段类型的

console.clear(); var datas = { "login": "iwenyou", "id": 20179472, "avatar_url": "https://avatars.githubusercontent.com/u/20179472?v=3", "gravatar_id": "", "url": "https://api.github.com/users/iwenyou", "html_url": "https://github.com/iwenyou", "followers_url": "https://api.github.com/users/iwenyou/followers", "following_url": "https://api.github.com/users/iwenyou/following{/other_user}", "gists_url": "https://api.github.com/users/iwenyou/gists{/gist_id}", "starred_url": "https://api.github.com/users/iwenyou/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/iwenyou/subscriptions", "organizations_url": "https://api.github.com/users/iwenyou/orgs", "repos_url": "https://api.github.com/users/iwenyou/repos", "events_url": "https://api.github.com/users/iwenyou/events{/privacy}", "received_events_url": "https://api.github.com/users/iwenyou/received_events", "type": "User", "site_admin": false, "name": null, "company": null, "blog": null, "location": "SF Bay Area", "email": null, "hireable": null, "bio": "A crawling programer...", "public_repos": 3, "public_gists": 0, "followers": 0, "following": 0, "created_at": "2016-06-28T04:45:54Z", "updated_at": "2016-07-10T03:47:33Z" } var output = "<div>" + datas['avatar_url'] + " | " + datas.login + "</div>"; console.log(output); document.write(output);是JSON数组 像这样使用params(和cJSON_GetArrayItem)API:

cJSON_GetArraySize