json-c使用学习

介绍

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,可以在多种语言之间进行数据交换 [5]  。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。

JSON是一个序列化的对象数组

JSON的构造元素有:

1. 六个构造字符

begin-array =  [              数组开始符 = 左方括号

begin-object = {             对象开始符 = 左大括号

end-array = ]                 数组结束符 = 右方括号

end-object = }                对象结束符 = 右大括号

name-separator = :        键名分隔符 = 冒号

value-separator = ,        值分割符 = 逗号

2. 在这六个构造字符的前或后允许存在无意义的空白符:

空格,水平标签,换行或换行,回程

3.JSON的值:

3.1 JSON的构成:

可以是对象数组数字字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。

对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的由逗号分割的键值对组成,如:

{"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}

JSON中的对象可以包含多个键值对,并且有数组结构,该语言正是一次实现过程内容的描述。

数组是由方括号括起来的一组值构成,如:

[3, 1, 4, 1, 5, 9, 2, 6]

字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。

数字也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。 

json-c开源库的使用

下载json-c开源库并编译

$ 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

使用头文件和编译好的库完成测试程序:

test.c内容如下:

#include 

#include "json.h"

int main(void)
{
    size_t length;

    struct json_object *obj;
    struct json_object *name_obj;

    /* 创建一个 json 对象 */
    obj = json_object_new_object();

    /* 给 json 对象 添加内容 */
    json_object_object_add(obj, "name", json_object_new_string("jack"));

    /* 将 json 对象 转成 字符串 并且 保存 获取 字符串长度 */
    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内容如下:

test:
        gcc -g test.c -o test -ljson-c -L. -I.
clean:
        rm -rf test

编译执行如下:

$ make
gcc -g test.c -o test -ljson-c -L. -I.
$ ./test
{"name":"jack"}
length = 15
name: jack

你可能感兴趣的:(json,学习)