在開(kāi)發(fā)中,經(jīng)常會(huì)涉及到從前端獲取到j(luò)son字符串,然后將其轉(zhuǎn)成對(duì)象數(shù)組來(lái)進(jìn)行操作處理。這時(shí)候我們可以使用C語(yǔ)言中的Json-c庫(kù)來(lái)完成這個(gè)操作。
Json-c庫(kù)是一個(gè)C語(yǔ)言編寫(xiě)的庫(kù),用于解析JSon數(shù)據(jù)格式的庫(kù),其主要功能包括將Json字符串解析成C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)、將C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成JSon字符串,非常方便實(shí)用。
下面是使用Json-c庫(kù)將Json字符串解析成對(duì)象數(shù)組的示例代碼:
#include <stdio.h> #include <stdlib.h> #include <json-c/json.h> int main() { //json字符串 char *jsonstr = "{\"person\": [{\"name\": \"Tom\", \"age\": 20}, {\"name\": \"Jerry\", \"age\": 18}]}"; //解析json字符串 json_object *obj = json_tokener_parse(jsonstr); //獲取person數(shù)組 json_object *person = json_object_object_get(obj, "person"); //獲取person數(shù)組元素個(gè)數(shù) int length = json_object_array_length(person); //遍歷person數(shù)組 for(int i=0; i<length; i++) { //獲取每一個(gè)person對(duì)象 json_object *per = json_object_array_get_idx(person, i); //獲取name屬性 json_object *name = json_object_object_get(per, "name"); //獲取age屬性 json_object *age = json_object_object_get(per, "age"); //打印name和age printf("name:%s,age:%d\n", json_object_get_string(name), json_object_get_int(age)); } return 0; }
示例代碼首先定義了一個(gè)Json字符串,然后使用json_tokener_parse()函數(shù)將字符串解析成json對(duì)象。接著使用json_object_object_get()函數(shù)獲取person數(shù)組,并使用json_object_array_length()函數(shù)獲取person數(shù)組元素個(gè)數(shù),最后使用json_object_array_get_idx()遍歷person數(shù)組,并通過(guò)json_object_object_get()函數(shù)獲取每一個(gè)person對(duì)象的name和age屬性,并打印輸出。
總結(jié):使用Json-c庫(kù)可以很方便地將Json字符串解析成對(duì)象數(shù)組,這樣我們可以在C語(yǔ)言中很方便地對(duì)Json數(shù)據(jù)進(jìn)行處理。