2016-04-25 8 views
0

Ich versuche, ein Array innerhalb einer JSON-Datei zu analysieren, wie soParse ein JSON-Array mit yajl

{ 
    "val": [5,6] 
} 

den folgenden Code verwenden, der mit der Bibliothek enthalten parse_config.c angepasst,

char errbuf[1024]; 
yajl_val node; 

long length; 
char *file_data = read_file(&length, "conf.json"); 

node = yajl_tree_parse((const char *) file_data, errbuf, sizeof(errbuf)); 

const char *path[] = {"val", (const char *) 0}; 
yajl_val v = yajl_tree_get(node, path, yajl_t_number); 

if (v) 
    printf("Node found.\n"); 
else 
    printf("Can't find node %s\n", path[0]); 

yajl_tree_free(node); 
free(file_data); 

Diese Methode ist erfolgreich für einen einzelnen Wert, z

{ 
    "val": 5 
} 

(durch erfolgreiche meine ich, dass v besiedelt und Node found. gedruckt wird), aber nicht für das Array. Was muss ich anders machen, damit das Array geparst wird?

Danke.

+0

'{„val‘= 5}' ist nicht gültig JSON. –

+0

@LeeDanielCrocker oops, nur ein Fehler beim Eintippen der Frage, jetzt behoben, vielen Dank, dass Sie darauf hingewiesen haben. – Sam

Antwort

0
  • Sie können YAJL_IS_ARRAY verwenden, um zu überprüfen, ob v Array True oder False ist. Wenn v ein Array ist, wird True zurückgegeben. Wenn v kein Array ist, wird false zurückgegeben.
  • Als nächstes können Sie diesen Code verwenden, um es zu analysieren:

    size_t len = v->u.array.len; 
    int i; 
    for (i = 0; i < len; ++i) { 
    
        // get ref to one object in array at a time 
        yajl_val obj = v->u.array.values[ i ]; // object 
        if(YAJL_IS_DOUBLE(obj)){ 
          printf("%s/%f ", key, obj->u.number.d); 
        } 
    } 
    
  • Einzelheiten können Sie hier sehen: Parse complex JSON sub objects in C with YAJL