一、JSON
1、JSON的介绍
①、JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),是轻量级的文本数据交换格式。
②、JSON 独立于语言,JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。
③、JSON 解析器和 JSON 库支持许多不同的编程语言。
④、SON是存储和交换文本信息的语法。
2、JSON的语法
①、数据在名称/值对中
"name":"Sanjay_Wu"
"name"为名称/值对(在双引号中),"Sanjay_wu"为值。
JSON 值可以是:
数字(整数或浮点数),例如:{ "age":24 }
字符串(在双引号中),例如:{"name":"Sanjay_Wu"}
逻辑值(true 或 false),例如:{ "flag":true }
数组(在中括号中),例如:{"Hobby":["basketball", "coding", "debug"]}
对象(在大括号中),例如{"info":{"age":24, "name":"Sanjay_Wu", "Hobby":"coding"}}
null,例如:{ "weibo":null }
②、数据由逗号分隔
"name":"CSDN", "url":"https://blog.csdn.net/Sanjay_Wu"
③、大括号保存对象
{"name":"CSDN", "url":"https://blog.csdn.net/Sanjay_Wu"}
④、中括号保存数组
{
"sites": [
{"name":"CSDN", "url":"https://blog.csdn.net/Sanjay_Wu"},
{"name":"GitHub" , "url":"https://github.com/sanjaywu"},
{"name":"cnblogs" , "url":"https://www.cnblogs.com"}
]
}
在上面的例子中,对象 “sites” 是包含三个对象的数组。每个对象表示某个网站(name、url)的记录。
二、cJSON
cJSON是一个仅有一个.h文件,一个.c文件组成的JSON解析器,它是由纯C(ANSI C89)实现的,跨平台性较好,采用链表存储。
1、cJSON下载
①、在GitHub的地址为:https://github.com/DaveGamble/cJSON
②、使用git克隆到本地:git clone [email protected]:DaveGamble/cJSON.git
二、cJSON移植
①、从git克隆下来之后,可以看到cJSON文件夹包含如下文件:
②、将cJSON.c
和cJSON
文件夹拷贝到自己的工程里面,并在自己的工程里面创建一个main.c
文件,测试工程只需包含cJSON.c
、cJSON
、main.c
这三个文件:
3、编译测试
①、修改main.c
文件代码:
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
char info[] = "{\"name\":\"Sanjay_Wu\", \"age\":24, \"hobby\":\"basketball\"}";
int main(void)
{
cJSON *json, *json_name, *json_age, *json_hobby;
json = cJSON_Parse(info);
if(NULL == json)
{
printf("Error before: [%s]\n", cJSON_GetErrorPtr());
return -1;
}
json_name = cJSON_GetObjectItem(json, "name");
if(json_name->type == cJSON_String)
{
printf("name: %s\n", json_name->valuestring);
}
json_age = cJSON_GetObjectItem(json, "age");
if(json_age->type == cJSON_Number)
{
printf("age: %d\n", json_age->valueint);
}
json_hobby = cJSON_GetObjectItem(json, "hobby");
if(json_hobby->type == cJSON_String)
{
printf("hobby: %s\n", json_hobby->valuestring);
}
cJSON_Delete(json);
return 0;
}
②、使用gcc编译:gcc -o cJSONtest cJSON.c main.c
③、执行./cJSONtest
name: Sanjay_Wu
age: 24
hobby: basketball
④、上述使用到的几个函数:
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
:将字符串解析成cJSON结构体。
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
:使用名称/值对获得对应的值。
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item);
:删除cJSON结构体。