0

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>"]}

以下のコードを使用して「id」と「メソッド」を取得できますが、XML 文字列である「params」内の値を取得または出力できません。「params」内に何でも印刷したい。

 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);

任意の提案を提供してください。

前もって感謝します。

4

2 に答える 2

0

(それを確認した後)に変更method_obj->valuestringするか、JSONリクエストを生成するサービスを用意してください。不要な場合は配列を使用しません。method_obj->child->valuestringchild != NULL

于 2016-07-18T06:42:47.797 に答える
0

paramsフィールド タイプのは JSON 配列です。(および) API を次のように
使用します。cJSON_GetArrayItemcJSON_GetArraySize

method_obj = cJSON_GetObjectItem(cjson, "params");
int size = cJSON_GetArraySize(method_obj);
for(int i = 0; i < size; ++i){
    params = cJSON_GetArrayItem(method_obj, i)->valuestring;
    printf("Params [ ] %s\n", params);
}
于 2016-07-18T06:58:24.070 に答える