JSON是一種輕量級的數據交互格式,近年來被廣泛應用。在C語言中,經常需要將JSON字符串轉換成對象。下面我們來講一下如何使用C語言進行JSON字符串的轉換。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <jansson.h> int main() { char *json_string = "{ \"name\": \"Tom\", \"age\": 18 }"; json_t *root; json_error_t error; const char *name; int age; root = json_loads(json_string, 0, &error); if (!root) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return 1; } if (!json_is_object(root)) { fprintf(stderr, "error: root is not an object\n"); json_decref(root); return 1; } json_t *json_name = json_object_get(root, "name"); if (!json_name) { fprintf(stderr, "error: name not found\n"); json_decref(root); return 1; } if (!json_is_string(json_name)) { fprintf(stderr, "error: name is not a string\n"); json_decref(root); return 1; } name = json_string_value(json_name); json_t *json_age = json_object_get(root, "age"); if (!json_age) { fprintf(stderr, "error: age not found\n"); json_decref(root); return 1; } if (!json_is_integer(json_age)) { fprintf(stderr, "error: age is not an integer\n"); json_decref(root); return 1; } age = json_integer_value(json_age); printf("name:%s age:%d\n", name, age); json_decref(root); return 0; }
上面的代碼中,首先定義了一個JSON格式的字符串,并創建一個json_t對象。然后調用json_loads()方法將json格式的字符串轉成json_t對象,同時會檢測JSON格式是否正確,如果不正確輸出錯誤信息。之后使用json_object_get()方法從json_t對象中獲取指定的key的值,并驗證該key是否存在以及值的類型是否正確。最后使用json_string_value()或json_integer_value()獲取相應的值,并打印出來。最后別忘了將json對象進行釋放。