cJSON介绍
作者:互联网
cJSON
JSON简介
JSON是存储和传输数据的格式。JSON经常在数据从服务器发送到网页时使用。JSON指的是 JavaScript Object Notation。JSON是轻量级的数据交换格式。JSON独立于语言。JSON是“自描述的”且易于理解。
当数据在浏览器与服务器之间进行交换时,这些数据只能是文本。JSON属于文本,并且我们能够把任何JavaScript对象转换为JSON,然后将JSON发送到服务器。我们也能把从服务器接收到的任何JSON转换为JavaScript对象。
JSON使用JavaScript语法,但是JSON格式是纯文本的。文本可被任何编程语言作为数据来读取和使用。这里就是以c语言来读取和使用。
JSON语法规则
JSON对象是在花括号内书写的。
- 数据是名称/值对(也叫键/值对)
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
下面是一个例子(test1.json):
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": [
"GML",
"XML"
]
},
"GlossSee": "markup"
}
}
}
}
}
JSON文件的文件类型是".json"。JSON文本的MIME类型是"application/json"。
cJSON使用
cJSON就是c语言解析JSON的库。
可以从https://sourceforge.net/projects/cjson/下载到源码。
可以直接通过它的示例来使用,首先编译:
F:\httpd\Apache24\cgi-bin>gcc cJSON.c test.c -o testJSON -lm
得到的结果就是testJSON,执行它后的结果(未列全):
{
“name”: “Jack (“Bee”) Nimble”,
“format”: {
“type”: “rect”,
“width”: 1920,
“height”: 1080,
“interlace”: false,
“frame rate”: 24
}
}// 后面的略
它跟如下代码匹配:
char text1[] = "{\n\"name\": \"Jack (\\\"Bee\\\") Nimble\", \n\"format\": {\"type\": \"rect\", \n\"width\": 1920, \n\"height\": 1080, \n\"interlace\": false,\"frame rate\": 24\n}\n}";
这里的例子是根据字符串(这里会看到很多讨厌的转义符,主要是针对引号),也可以针对JSON文件,这可能更常用,这部分代码原本是注释掉的,可以打开来测试:
dofile("tests/test1.json");
其中test1.json的内容已经在前面介绍过。
得到的结果:
F:\httpd\Apache24\cgi-bin>testJSON.exe
{
“glossary”: {
“title”: “example glossary”,
“GlossDiv”: {
“title”: “S”,
“GlossList”: {
“GlossEntry”: {
“ID”: “SGML”,
“SortAs”: “SGML”,
“GlossTerm”: “Standard Generalized Markup Language”,
“Acronym”: “SGML”,
“Abbrev”: “ISO 8879:1986”,
“GlossDef”: {
“para”: “A meta-markup language, used to create markup languages such as DocBook.”,
“GlossSeeAlso”: [“GML”, “XML”]
},
“GlossSee”: “markup”
}
}
}
}
}
内容当然也是一致的。
如果我们需要获取JSON中的某个属性,可以通过cJSON_GetObjectItem()
可以根据键来获取其值,下面是一个例子:
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
// Get the data from file.
// The caller is responsible to free memory.
char *getdata(char* filename)
{
FILE *f;
long len;
char *data;
f = fopen(filename, "rb");
if (NULL == f)
{
return NULL;
}
fseek(f, 0, SEEK_END);
len = ftell(f);
fseek(f, 0, SEEK_SET);
data = (char *)malloc(len + 1);
fread(data, 1, len, f);
fclose(f);
return data;
}
int main(int argc, const char *argv[])
{
cJSON *json;
cJSON *subjson;
char *data;
char *out;
printf("Parsing JSON ...\n");
data = getdata("tests/test1.json");
if (NULL == data)
{
printf("Get data failed.\n");
goto EXIT;
}
// Convert file data to JSON.
json = cJSON_Parse(data);
if (json)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out = cJSON_Print(json);
printf("%s\n", out);
free(out);
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
}
else
{
printf("Parse data failed.\n");
goto EXIT;
}
subjson = cJSON_GetObjectItem(json, "glossary");
if (subjson)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
out = cJSON_Print(subjson);
printf("%s\n", out);
free(out);
printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
}
else
{
printf("Get item failed.\n");
goto EXIT;
}
EXIT:
if (NULL != data)
{
free(data);
}
if (NULL != json)
{
cJSON_Delete(json);
}
return 0;
}
得到结果:
F:\httpd\Apache24\cgi-bin>json.exe
Parsing JSON …
标签:cJSON,json,介绍,char,JSON,printf,data 来源: https://blog.csdn.net/jiangwei0512/article/details/118769824