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