cJSON学习笔记——初识cJSON

一、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文件夹
②、将cJSON.ccJSON文件夹拷贝到自己的工程里面,并在自己的工程里面创建一个main.c文件,测试工程只需包含cJSON.ccJSONmain.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结构体。

发布了54 篇原创文章 · 获赞 92 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Sanjay_Wu/article/details/103349353