色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 反序列化解析json

方一強2年前8瀏覽0評論

C語言中反序列化解析JSON文件是一種常見的數據處理方式。JSON是一種輕量級的數據交換格式,它由鍵值對(key-value)構成,支持數組和對象類型。反序列化是將JSON格式的字符串轉換成對應的數據結構的過程,將JSON數據和C語言中的數據對象進行映射和轉換。本文將介紹如何使用C語言實現反序列化解析JSON文件。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<jansson.h>
int main(){
char* jsonStr = "{\"name\":\"Tom\",\"age\":18,\"grades\":[80,90,85]}";
json_error_t error;
json_t* root = json_loads(jsonStr, 0, &error);
if(root == NULL){
printf("JSON解析錯誤: %s", error.text);
return -1;
}
const char* name;
json_int_t age;
json_t* grades;
json_t* grade;
size_t i;
if(!json_is_object(root)){
printf("JSON解析錯誤: 根節點不是一個對象\n");
return -1;
}
json_unpack(root, "{s:s,s:i,s:o}", "name", &name, "age", &age, "grades", &grades);
printf("姓名:%s\n", name);
printf("年齡:%d\n", age);
if(json_array_size(grades)==0){
printf("成績:%s\n", "無");
}else{
printf("成績:");
for(i=0; i<json_array_size(grades); i++){
grade = json_array_get(grades, i);
printf("%d ", json_integer_value(grade));
}
}
json_decref(root);
return 0;
}

在上述代碼中,程序首先定義了一個JSON格式字符串,并使用json_loads函數將其解析為一個json_t對象。如果解析失敗則會返回空指針并提示解析錯誤的信息。解析成功后,使用json_unpack函數將json_t對象中的數據解包到指定的變量中,從而將JSON數據映射到C語言中的數據結構中。其中,需要注意的是,json_unpack函數的格式參數可以與sprintf函數中的格式參數作法相同,指明輸入數據的數據類型、數據名稱以及其在JSON中對應的鍵名。在本例中,我們使用了“s:s”、“i”、“o”等格式參數,分別表示字符串、整數、對象等類型的數據內容。最后,使用json_decref函數釋放內存,以達到程序健壯性和優化內存占用的目的。