在C中查找JSON字符串是否包含某個字段或值是一個常見的需求。如果你使用JSON作為你的數(shù)據(jù)格式,那么很可能需要在C中解析JSON字符串并查找里面的內(nèi)容。以下是一個簡單的例子:
#include <stdio.h> #include <jansson.h> int main() { const char *json_string = "{ \"name\": \"Alice\", \"age\": 25 }"; json_t *json_root = json_loads(json_string, 0, NULL); json_t *name = json_object_get(json_root, "name"); if(name) { printf("Found name: %s\n", json_string_value(name)); } else { printf("Name not found.\n"); } json_decref(json_root); return 0; }
這個例子使用了jansson庫來解析JSON字符串。json_loads函數(shù)將一個JSON字符串轉(zhuǎn)換為一個json_t結構體,json_object_get函數(shù)可以在json_t結構體中查找指定的字段或值。如果找到了指定的字段或值,json_object_get函數(shù)返回一個非空指針,否則返回NULL。
在實際應用中,我們可能需要遍歷整個JSON字符串來查找所有包含指定字段或值的部分。以下是一個例子:
#include <stdio.h> #include <jansson.h> void search_json(json_t *json, const char *name) { if(json_is_object(json)) { const char *key; json_t *value; json_object_foreach(json, key, value) { if(!strcmp(key, name)) { printf("Found %s: %s\n", key, json_string_value(value)); } search_json(value, name); } } else if(json_is_array(json)) { size_t i; json_t *value; json_array_foreach(json, i, value) { search_json(value, name); } } } int main() { const char *json_string = "{ \"name\": \"Alice\", \"pets\": [\"cat\", \"dog\", \"hamster\"], \"address\": { \"city\": \"Shanghai\", \"country\": \"China\" } }"; json_t *json = json_loads(json_string, 0, NULL); search_json(json, "city"); search_json(json, "dog"); json_decref(json); return 0; }
這個例子定義了一個名為search_json的函數(shù),它可以遞歸地遍歷JSON字符串中的所有部分,并查找包含指定字段或值的部分。如果找到了指定的字段或值,該函數(shù)將在控制臺上打印相應的信息。在主函數(shù)中,我們演示了如何查找JSON字符串中包含"city"和"dog"的部分。