C JSON解析實例
// 引入相關頭文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> int main(int argc, char *argv[]) { // 打開JSON文件 FILE *fp = fopen("example.json", "r"); if (!fp) { printf("Failed to open file example.json\n"); return 1; } // 讀取數據 char buffer[1024]; size_t len; json_t *root; json_error_t error; while ((len = fread(buffer, 1, sizeof(buffer), fp)) >0) { root = json_loads(buffer, 0, &error); if (!root) { printf("Error on line %d: %s\n", error.line, error.text); return 1; } } // 解析數據 const char *name; json_t *value; // 解析對象 json_object_foreach(root, name, value) { printf("Object: %s\n", name); // 解析數組 if (json_is_array(value)) { for (int i = 0; i< json_array_size(value); i++) { json_t *array_item = json_array_get(value, i); printf("- Array item: %s\n", json_string_value(array_item)); } } // 解析字符串 if (json_is_string(value)) { printf("- String value: %s\n", json_string_value(value)); } // 解析整型 if (json_is_integer(value)) { printf("- Integer value: %lld\n", json_integer_value(value)); } // 解析實型 if (json_is_real(value)) { printf("- Real value: %f\n", json_real_value(value)); } } // 釋放資源 fclose(fp); json_decref(root); return 0; }
本例子使用C語言解析JSON格式數據,使用了json-c和jansson兩個庫。
通過調用json_loads函數可以將JSON數據解析成一個json_t對象,然后使用json_object_foreach函數解析各個字段的值,使用json_is_xxx判斷值類型,使用json_xxx_value函數獲取值。