在c語言中解析json數據時,常常會遇到主表與明細表的問題,本文介紹兩種解析方法。
1. 使用第三方庫cJSON解析
cJSON *root = cJSON_Parse(json_str); cJSON *main_table = cJSON_GetObjectItem(root, "main_table"); cJSON *detail_table = cJSON_GetObjectItem(root, "detail_table"); int main_len = cJSON_GetArraySize(main_table); for(int i = 0; i < main_len; i++) { cJSON *item = cJSON_GetArrayItem(main_table, i); //解析主表數據 cJSON *detail_item = cJSON_GetObjectItem(detail_table, item->valuestring); if(detail_item != NULL) { int detail_len = cJSON_GetArraySize(detail_item); for(int j = 0; j < detail_len; j++) { cJSON *sub_item = cJSON_GetArrayItem(detail_item, j); //解析明細表數據 } } }
2. 使用原生c語言解析
json_object *root = json_tokener_parse(json_str); json_object *main_table; json_object *detail_table; json_object_object_get_ex(root, "main_table", &main_table); json_object_object_get_ex(root, "detail_table", &detail_table); int main_len = json_object_array_length(main_table); for(int i = 0; i < main_len; i++) { json_object *item = json_object_array_get_idx(main_table, i); //解析主表數據 json_object *detail_item; json_object_object_get_ex(detail_table, json_object_get_string(item), &detail_item); if(detail_item != NULL) { int detail_len = json_object_array_length(detail_item); for(int j = 0; j < detail_len; j++) { json_object *sub_item = json_object_array_get_idx(detail_item, j); //解析明細表數據 } } } json_object_put(root);
無論使用哪種方法,我們都需要注意json格式的正確性,不正確的json格式會導致解析出錯。