2016-07-18 13 views
0

Ich versuche, die cJSON Bibliothek zu verwenden, die von Dave Gamble geschrieben, in der folgenden JSON Anfrage zu lesen:C: Wie man einen Wert von der Json Anfrage parsiert?

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

Ich bin in der Lage, die „id“ und „Methode“, indem Sie unter Code abgerufen wird, sondern nicht in der Lage, die Werte in "params", die eine XML-Zeichenfolge ist, abzurufen oder zu drucken. Ich möchte was auch immer innerhalb der "params" drucken.

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

Bitte geben Sie einen Vorschlag.

Vielen Dank im Voraus.

+0

' "params"' ist Typ Array. – BLUEPIXY

+0

nein nicht genau ich denke, ich bekomme diese Anfrage von meinem Java-Code, der ein Objekt in XML-String konvertiert und Anfrage senden. – Neeraj

Antwort

0

Entweder ändern method_obj->valuestring zu method_obj->child->valuestring (danach child != NULL Kontrolle) oder den Dienst aufweisen, welche die JSON Anforderung erzeugt, nicht ein Array verwenden, wenn keine benötigt wird.

+0

a3f @ Danke Mann, es funktioniert, Sie sparen meinen Tag. Ich habe versucht mit method_obj-> Kind. +1 für die Antwort. – Neeraj

0

params des Feldtyps ist JSON Array.
Verwendung cJSON_GetArrayItem (und cJSON_GetArraySize) API wie folgt aus:

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