柚子快報(bào)邀請(qǐng)碼778899分享:json-c使用學(xué)習(xí)
柚子快報(bào)邀請(qǐng)碼778899分享:json-c使用學(xué)習(xí)
介紹
JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫(xiě),可以在多種語(yǔ)言之間進(jìn)行數(shù)據(jù)交換 [5]? 。同時(shí)也易于機(jī)器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。
JSON是一個(gè)序列化的對(duì)象或數(shù)組。
JSON的構(gòu)造元素有:
1. 六個(gè)構(gòu)造字符:
begin-array = ?[? ? ? ? ? ? ? 數(shù)組開(kāi)始符 = 左方括號(hào)
begin-object = {? ? ? ? ? ? ?對(duì)象開(kāi)始符 = 左大括號(hào)
end-array = ]? ? ? ? ? ? ? ? ?數(shù)組結(jié)束符 = 右方括號(hào)
end-object = }? ? ? ? ? ? ? ? 對(duì)象結(jié)束符 = 右大括號(hào)
name-separator = :? ? ? ? 鍵名分隔符 = 冒號(hào)
value-separator = ,? ? ? ? 值分割符 = 逗號(hào)
2. 在這六個(gè)構(gòu)造字符的前或后允許存在無(wú)意義的空白符:
空格,水平標(biāo)簽,換行或換行,回程
3.JSON的值:
3.1 JSON的構(gòu)成: 值
值可以是對(duì)象、數(shù)組、數(shù)字、字符串或者三個(gè)字面值(false、null、true)中的一個(gè)。值中的字面值中的英文必須使用小寫(xiě)。
對(duì)象由花括號(hào)括起來(lái)的逗號(hào)分割的成員構(gòu)成,成員是字符串鍵和上文所述的值由逗號(hào)分割的鍵值對(duì)組成,如:
{"name":?"John?Doe",?"age":?18,?"address":?{"country"?:?"china",?"zip-code":?"10000"}}
JSON中的對(duì)象可以包含多個(gè)鍵值對(duì),并且有數(shù)組結(jié)構(gòu),該語(yǔ)言正是一次實(shí)現(xiàn)過(guò)程內(nèi)容的描述。
數(shù)組是由方括號(hào)括起來(lái)的一組值構(gòu)成,如:
[3,?1,?4,?1,?5,?9,?2,?6]
字符串與C或者Java的字符串非常相似。字符串是由雙引號(hào)包圍的任意數(shù)量Unicode字符的集合,使用反斜線轉(zhuǎn)義。一個(gè)字符(character)即一個(gè)單獨(dú)的字符串(character?string)。
數(shù)字也與C或者Java的數(shù)值非常相似。除去未曾使用的八進(jìn)制與十六進(jìn)制格式。除去一些編碼細(xì)節(jié)。?
json-c開(kāi)源庫(kù)的使用
下載json-c開(kāi)源庫(kù)并編譯
$ git clone https://github.com/json-c/json-c.git
$ mkdir json-c-build
$ cd json-c-build
$ cmake ../json-c
$ make
$ make test
$ make USE_VALGRIND=0 test
$ sudo make install
使用頭文件和編譯好的庫(kù)完成測(cè)試程序:
test.c內(nèi)容如下:
#include
#include "json.h"
int main(void)
{
size_t length;
struct json_object *obj;
struct json_object *name_obj;
/* 創(chuàng)建一個(gè) json 對(duì)象 */
obj = json_object_new_object();
/* 給 json 對(duì)象 添加內(nèi)容 */
json_object_object_add(obj, "name", json_object_new_string("jack"));
/* 將 json 對(duì)象 轉(zhuǎn)成 字符串 并且 保存 獲取 字符串長(zhǎng)度 */
const char* buf = json_object_to_json_string_length(obj, 0, &length);
printf("%s\n", buf);
printf("length = %ld\n", length);
/* 解析json */
obj = json_tokener_parse(buf);
name_obj = json_object_object_get(obj, "name");
printf("name: %s\n", json_object_get_string(name_obj));
return 0;
}
Makefile內(nèi)容如下:
test:
gcc -g test.c -o test -ljson-c -L. -I.
clean:
rm -rf test
編譯執(zhí)行如下:
$ make
gcc -g test.c -o test -ljson-c -L. -I.
$ ./test
{"name":"jack"}
length = 15
name: jack
柚子快報(bào)邀請(qǐng)碼778899分享:json-c使用學(xué)習(xí)
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。