C語(yǔ)言中JSON作為一種輕量級(jí)的數(shù)據(jù)傳輸格式,在實(shí)際開(kāi)發(fā)中經(jīng)常使用。隨著業(yè)務(wù)的發(fā)展和數(shù)據(jù)的復(fù)雜性,我們有時(shí)需要處理一對(duì)多的JSON數(shù)據(jù),也就是 key 對(duì)應(yīng)多個(gè) value 的情況,這時(shí)候我們就需要使用C語(yǔ)言中的高級(jí)JSON庫(kù)來(lái)解析一對(duì)多的數(shù)據(jù)。
#include <stdio.h> #include <jansson.h> int main() { const char *json_str = "{\"name\": [\"Alice\", \"Bob\", \"Charlie\"]}"; json_error_t error; json_t *root = json_loads(json_str, 0, &error); if(!root) { printf("json error on line %d: %s", error.line, error.text); return 1; } json_t *names = json_object_get(root, "name"); if(!json_is_array(names)) { printf("names is not an array"); return 2; } size_t i; for(i = 0; i < json_array_size(names); i++) { json_t *name = json_array_get(names, i); if(!json_is_string(name)) { printf("element %d is not a string", i); return 3; } printf("%s\n", json_string_value(name)); } json_decref(root); return 0; }
在上面的代碼中,我們使用了json_object_get()
來(lái)獲取 JSON 中的名稱為 “name”的元素,它是一個(gè)數(shù)組類型。而對(duì)于數(shù)組類型,我們使用json_array_size()
來(lái)獲取元素?cái)?shù)量,再使用json_array_get()
來(lái)獲取每個(gè)元素。最后再判斷元素類型,如果是字符串類型,就可以獲取到對(duì)應(yīng)的值。
總體來(lái)說(shuō),C語(yǔ)言中的高級(jí)JSON庫(kù)非常靈活,可以很方便地解析各種復(fù)雜的JSON數(shù)據(jù)結(jié)構(gòu)。我們只需要根據(jù)實(shí)際情況,使用不同的API,就可以很好地處理JSON數(shù)據(jù)。