C JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,廣泛用于前后端交互中。在JSON數(shù)據(jù)結(jié)構(gòu)中,每一個(gè)數(shù)據(jù)都有一個(gè)鍵和對(duì)應(yīng)的值。在某些情況下,我們需要獲取某個(gè)字段的所有值,這時(shí)可以使用C語(yǔ)言中提供的JSON庫(kù)來(lái)實(shí)現(xiàn)。
//示例JSON格式數(shù)據(jù)
{
"name": "小明",
"age": 18,
"hobby": ["籃球", "游戲", "電影"],
"address": {
"city": "北京",
"street": "朝陽(yáng)區(qū)"
}
}
//代碼獲取所有hobby值的示例
#include <stdio.h>
#include <jansson.h>
int main() {
const char *json_string = "{\"name\":\"小明\",\"age\":18,\"hobby\":[\"籃球\",\"游戲\",\"電影\"],\"address\":{\"city\":\"北京\",\"street\":\"朝陽(yáng)區(qū)\"}}";
json_error_t error;
json_t *root = json_loads(json_string, 0, &error);
if(!root) {
printf("JSON解析錯(cuò)誤:{%s} %d:%d near '%s'\n", error.source, error.line, error.column, error.text);
return -1;
}
json_t *hobby_array = json_object_get(root, "hobby");
if(!json_is_array(hobby_array)) {
printf("hobby字段數(shù)據(jù)類型錯(cuò)誤\n");
return -1;
}
size_t hobby_num = json_array_size(hobby_array);
for (size_t i = 0; i< hobby_num; i++) {
json_t *hobby = json_array_get(hobby_array,i);
if(json_is_string(hobby)) {
const char *hobby_str = json_string_value(hobby);
printf("hobby[%d]: %s\n", i, hobby_str);
}
}
json_decref(hobby_array);
json_decref(root);
return 0;
}
代碼中我們使用了JSON-C這個(gè)C語(yǔ)言的JSON解析庫(kù),它能夠處理在C語(yǔ)言環(huán)境中的JSON編解碼。通過(guò)json_object_get方法獲取JSON對(duì)象中的某個(gè)屬性,如果是一個(gè)數(shù)組,那么再用json_array_size和json_array_get方法遍歷數(shù)組,得到所有的值。使用json_decref方法釋放資源。
最終我們會(huì)得到這樣的結(jié)果:
hobby[0]: 籃球
hobby[1]: 游戲
hobby[2]: 電影
現(xiàn)在你已經(jīng)知道了如何獲取C JSON某個(gè)字段的所有值,希望能對(duì)你有所幫助。