c語言建立和解析json資料
阿新 • • 發佈:2018-11-03
之前一篇有說到使用lincurl庫獲取網頁資料,那麼問題來了,當我們獲取到的資料大多是json的格式,應該怎麼解析出我們需要的欄位呢?下面我們使用json-glib庫來對json資料進行建立和解析。
#include<json-glib/json-glib.h> #include<stdio.h> #include<string.h> int main() { //生成json g_type_init(); JsonObject *obj = json_object_new(); json_object_set_string_member(obj, "name", "john"); json_object_set_int_member(obj, "age", 18); JsonArray *arr = json_array_new(); json_array_add_string_element(arr, "lily");//{"name":"john","age":18,"friends":["lily","mark"]} json_array_add_string_element(arr, "mark"); json_object_set_array_member(obj, "friends", arr); JsonGenerator *g = json_generator_new(); JsonNode *root = json_node_new(JSON_NODE_OBJECT); json_node_set_object(root, obj); json_generator_set_root(g, root); json_generator_to_file(g, "ex.json", NULL); //解析!!! JsonParser *parser = json_parser_new(); JsonNode *node = json_node_new(JSON_NODE_OBJECT); json_parser_load_from_file(parser, "ex.json", NULL); node = json_parser_get_root(parser); JsonObject *obj2 = json_object_new(); obj2 = json_node_get_object(node); const char *aaa = json_object_get_string_member(obj2, "name"); const int aa = json_object_get_int_member(obj2, "age"); printf("%s\n", aaa); printf("%d\n", aa); JsonArray *array = json_array_new(); array = json_object_get_array_member(obj2, "friends"); const char *bbb = json_array_get_string_element(array, 0); const char *bb = json_array_get_string_element(array, 1); printf("%s\n", bbb); printf("%s\n", bb); return 0; }
找庫:
首先安裝json-glib庫和pkg-config,dnf install json-glib-devel (ubuntu 下使用apt安裝)
安裝完以後使用pkg-config查詢json-glib所需要的標頭檔案和庫檔案路徑pkg-config --cflags --libs json-glib-1.0,這個命令會去尋找庫的.pc檔案一般存在/usr/lib/pkgconfig目錄下有很多.pc檔案記錄庫的版本標頭檔案以及庫檔案路徑的。
pkg-config --cflags --libs json-glib-1.0 -I/usr/include/json-glib-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread -ljson-glib-1.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
編譯:
gcc test.c `pkg-config --cflags --libs json-glib-1.0`