欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 序列化 json

傅智翔2年前9瀏覽0評論

C語言是一種廣泛用于系統(tǒng)編程的語言,從數(shù)據(jù)的操作性能上講,他非常高效。而json是一種輕量級的數(shù)據(jù)交換格式,更加適用于移動設(shè)備、獲取Web API、RPC等領(lǐng)域。所以,使用C語言序列化JSON就成為了很多開發(fā)者很關(guān)心的一個問題。

C語言沒有現(xiàn)成的json序列化庫,但是可以通過緩沖技巧實(shí)現(xiàn)json序列化。可以定義一個char型數(shù)組,將需要序列化的對象轉(zhuǎn)化為json對象,然后將這個json對象逐一放入到 char型數(shù)組中。最后將char型數(shù)組的內(nèi)容通過網(wǎng)絡(luò)傳輸、保存到文件等方式交流數(shù)據(jù)。

以下是一個簡單的C語言實(shí)現(xiàn)的JSON對象。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BUF_LEN 1024
#define JSON_OBJECT_START "{"
#define JSON_OBJECT_END "}"
#define JSON_ARRAY_START "["
#define JSON_ARRAY_END "]"
#define JSON_SEPARATOR ","
#define JSON_SEPARATOR_LEN 1
#define JSON_QUOTE "\""
typedef struct {
char keyName[20];
char value[20];
} JsonElement;
typedef struct {
JsonElement elements[5];
} JsonObject;
int main(int argc, char *argv[]) {
char buf[MAX_BUF_LEN];
JsonObject person;
strcpy(person.elements[0].keyName, "name");
strcpy(person.elements[0].value, "Tom");
strcpy(person.elements[1].keyName, "age");
strcpy(person.elements[1].value, "25");
strcpy(person.elements[2].keyName, "sex");
strcpy(person.elements[2].value, "male");
sprintf(buf, JSON_OBJECT_START "\"%s\":%s" JSON_SEPARATOR "\"%s\":%s" JSON_SEPARATOR "\"%s\":%s" JSON_OBJECT_END, 
person.elements[0].keyName, person.elements[0].value,
person.elements[1].keyName, person.elements[1].value,
person.elements[2].keyName, person.elements[2].value);
printf("%s\n", buf);
return 0;
}

由于C語言中還沒有bool和null型,需要自己提前定義。通常,我們在序列化時,以true用’1'表示,以false用’0'表示,以null用“”,即空字符串(不要與NULL混淆)表示。

C語言通過字符串緩沖實(shí)現(xiàn)JSON序列化,實(shí)現(xiàn)代碼經(jīng)常凌亂不堪。為了避免每次都自己重寫序列化代碼,可以使用現(xiàn)有的第三方庫來序列化json,比如cJSON、Jansson、JSMN等等,它們可以非常方便地生成和解析json。