在C語言中,讀取JSON數據時最常用的方法就是使用第三方庫。這里我們介紹使用jansson庫進行JSON數據處理。
頭文件引用: #include <jansson.h> C語言版JSON API: jansson庫提供的API十分簡潔,以json_t 和 json_error_t 為主要結構體,json_object() 和 json_array() 則為創建JSON對象和JSON數組提供了支持。下面是一些常用的函數。 //創建JSON對象 json_t *json_object(void); //創建JSON數組 json_t *json_array(void); //將JSON字符串解析成JSON對象 json_t *json_loads(const char *input, size_t flags, json_error_t *error); //將JSON對象輸出成JSON字符串 char *json_dumps(const json_t *json, size_t flags); //獲取JSON對象某個JSON數據的值 json_t *json_object_get(const json_t *json, const char *key); //遍歷JSON對象中JSON數據的值 const char *key; json_t *value; json_object_foreach (json_t *object, key, value) { // your code here } 具體使用可以參考官方文檔:https://jansson.readthedocs.io/en/2.13/ 下面我們以一個簡單的例子來演示如何讀取JSON數據中的某些值:
#include <stdio.h> #include <jansson.h> int main(void) { //定義JSON對象和錯誤結構體 json_t *root; json_error_t error; //輸入JSON字符串 const char *json_str = "{\"name\":\"Michael\",\"age\":20,\"score\":70.5}"; //解析JSON字符串 root = json_loads(json_str, 0, &error); //獲取JSON數據 const char *name; int age; float score; json_t *name_obj, *age_obj, *score_obj; name_obj = json_object_get(root, "name"); age_obj = json_object_get(root, "age"); score_obj = json_object_get(root, "score"); if (!name_obj || !age_obj || !score_obj) { fprintf(stderr, "JSON 數據無效\n"); return 1; } name = json_string_value(name_obj); age = json_integer_value(age_obj); score = json_real_value(score_obj); //輸出獲取到的值 printf("Name: %s\nAge: %d\nScore: %.1f\n", name, age, score); //釋放JSON對象內存 json_decref(root); return 0; }其中,json_string_value()、json_integer_value() 和 json_real_value() 函數分別用于將獲取到的值轉化為字符串、整型、浮點數類型。 通過jansson庫對JSON數據進行處理,C語言的JSON數據讀寫變得十分簡便,同時也給C語言在處理JSON數據時帶來了新的可能性和思路。