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結構體。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章