2016-07-18 2 views
0

私は、次のJSONリクエストに読み取るために、デイヴ・ギャンブルによって書かれた、cJSONライブラリを使用しようとしています:私は、コードの下に使用することにより、「ID」と「方法」を取得することができる午前C: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>"]} 

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

ご提案ください。

ありがとうございました。

+0

' "のparams"'タイプは、Arrayです。 – BLUEPIXY

+0

正確にはわからないが、オブジェクトをxml文字列に変換してリクエストを送信しているJavaコードからこのリクエストを受け取っている。 – Neeraj

答えて

0

child != NULLをチェックした後に)method_obj->valuestringをに変更するか、JSONリクエストを生成するサービスを必要としない場合は使用しないでください。

+0

a3f @ありがとうございました。私は method_obj-> childで試していました。答えは +1です。 – Neeraj

0

paramsはJSON配列です。
使用cJSON_GetArrayItem(およびcJSON_GetArraySize)このようなAPI:

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); 
} 
関連する問題