C JSON SelectToken是一個(gè)解析JSON數(shù)據(jù)的工具,使用它可以很方便地獲取JSON數(shù)據(jù)中的指定部分,它使用了一個(gè)類似XPath表達(dá)式的語法。
json_object *root = json_tokener_parse("{ \"name\":\"John\", \"age\":30, \"city\":\"New York\" }"); json_object *name_obj = json_object_object_get(root, "name"); const char *name = json_object_get_string(name_obj); printf("Name: %s\n", name);
以上代碼實(shí)現(xiàn)了從JSON數(shù)據(jù)中獲取"name"字段的值。
使用SelectToken可以更加簡化這個(gè)過程,比如我們需要從以下JSON數(shù)據(jù)中獲取所有姓名為"John"的人:
{ "people":[ { "name":"John", "age":30, "city":"New York" }, { "name":"Mary", "age":25, "city":"Los Angeles" }, { "name":"John", "age":40, "city":"Chicago" } ] }
我們可以使用以下代碼來實(shí)現(xiàn):
json_object *root = json_tokener_parse(json_data); json_object *people = json_object_object_get(root, "people"); json_object *johns = json_object_select(people, "$.[?(@.name == 'John')]"); int len = json_object_array_length(johns); for (int i = 0; i < len; i++) { json_object *person = json_object_array_get_idx(johns, i); const char *name = json_object_get_string(json_object_object_get(person, "name")); printf("Name: %s\n", name); }
以上代碼實(shí)現(xiàn)了從JSON數(shù)據(jù)中使用SelectToken獲取所有姓名為"John"的人,使用SelectToken可以很方便地過濾和獲取JSON數(shù)據(jù)中的指定部分。