在C11中解析和操作JSON數據結構非常簡單。JSON是一種常用的數據格式,它可以儲存復雜的數據結構,包括數組和嵌套對象。在C11中解析JSON數據需要使用外部庫,比較流行的庫有jansson和json-c。
這里我們以json-c為例,假設我們有一個名為“config.json”的文件,其中包含了以下字符串:
{ "title": "My website", "pages": ["home", "about", "blog"], "author": { "name": "John Doe", "email": "johndoe@example.com" } }
我們可以使用以下代碼來解析該JSON文件:
#include <stdio.h> #include <json-c/json.h> int main() { // 打開文件 FILE *fp; fp = fopen("config.json", "rb"); if (fp == NULL) { printf("無法打開文件"); return 0; } // 讀取文件 char buffer[1024]; fread(buffer, 1, 1024, fp); fclose(fp); // 解析JSON struct json_object *root; root = json_tokener_parse(buffer); // 從JSON對象中獲取數據 struct json_object *title, *pages, *author; json_object_object_get_ex(root, "title", &title); json_object_object_get_ex(root, "pages", &pages); json_object_object_get_ex(root, "author", &author); // 打印數據 printf("標題:%s\n", json_object_get_string(title)); printf("頁面:%zu\n", json_object_array_length(pages)); printf("作者:%s\n", json_object_get_string(json_object_object_get(author, "name"))); // 釋放JSON對象 json_object_put(root); return 0; }
在代碼中,我們首先打開文件并讀取文件內容。然后使用json_tokener_parse函數將JSON字符串解析成一個json_object類型的根對象。接著我們可以使用json_object_object_get_ex函數從根對象中獲取需要的數據,并使用json_object_get_string和json_object_array_length兩個函數獲取字符串和數組長度。最后,我們使用json_object_put函數釋放對象并完成操作。
需要注意的是,使用JSON庫操作的內存需要手動釋放。因此,使用結束后一定要調用json_object_put函數進行釋放。