c json原始碼分析

2021-08-20 00:18:27 字數 2212 閱讀 3597

本文主要講述對於c-json部分

api的作用

c下面的

json

字串格式(直接寫在程式裡面,

\是用來轉義"的

)(此處格式必須正確,否則後面解析會出問題

):在c語言中

json

串說白了就是字串,用字元陣列儲存,在解析過程中將自己要解析的

json

串傳入cjson_parse(value)

函式,即可 解析;

cjson_parse(value)函式直接呼叫了

cjson_parsewithopts(value,0,0)

函式,在這個函式裡面開始初始化

parse_buffer

結構體(

我們的json

串就存放在這個結構體元素

content裡面)

,申請乙個

cjson

節點,作為我們後續按鍵查值等各種操作的操作節點

(並非儲存資料節點,真正的儲存資料節點是以

cjson->child

為頭結點的鍊錶,通過

cjson->child->next遍歷)

cjson_parsewithopts(value,0,0)函式呼叫真正的

json

解析函式

parse_value(item

,input_buffer)(

將json

資料解析後存入

item->child

為首的鍊錶);

parse_value()函式對

json

串進行格式校驗並依據字元進行解析, 在儲存

json

串進入cjson

鍊錶時,將鍵存入了

cjson

結構體元素

string

裡面,將值存入了結構體元素

valuestring

裡面;解析字元:

"(引號

) :

parse_string(); //

鍵和值必須是用引號引起來的,巢狀

json

除外-和0到

9的數字:

parse_number();

[(左中括號

) :

parse_array(); //

巢狀json

,中括號內的東西作為冒號前面鍵的值

{(左大括號

) :

parse_object(); //json

串基本上以這個字元開始

因為json串屬於巢狀型別的字串格式,上述四個函式會迴圈呼叫,不要亂,找乙個

json

串,按照鍵:值對方式跟著去解析就能明了;

四個列印函式:cjson_print()、

cjson_printunformatted()

、cjson_printbuffered()

、cjson_printpreallocated()

,需要定義

char *

指標承接返回值,返回值為列印內容首位址;四個函式傳參、列印格式不一樣,未細緻研究;

cjson_delete()函式為釋放鍊錶,刪除節點函式,函式結束時要記得呼叫此函式釋放申請的記憶體;

函式cjson_getarraysize()會獲取當前鍊錶節點個數,節點個數對應為多少個鍵值對;

函式cjson_getarrayitem(array,index)提供按陣列元素方式訪問具體儲存某乙個鍵值對的節點(如有

5個鍵值對存入鍊錶,則可以訪問

0-4的節點位置,對應具體的鍵值對);

因為json串中的鍵具有唯一性,函式

cjson_getobjectitem(object,string)

提供按照鍵的內容查詢到具體某乙個節點

(鍵值對

)的資訊,包含乙個不區分大小寫的功能;

函式cjson_getobjectitemcasesensitive()函式與上乙個按鍵的內容查詢具體節點資訊的功能類似,只不過少了乙個不區分大小寫的功能;

函式cjson_hasobjectitem()功能是檢測

cjson_getobjectitem(object,string)

函式返回是否成功,本函式成功返回

1,失敗返回0;

(用了乙個三目運算子

)函式cjson_geterrorptr()能夠獲取解析失敗的報錯資訊;(未測試)

cJSON 原始碼分析

在解決這三個問題之前,先介紹一下我所使用的原始碼分析工具 gcc g 原始碼編譯 make 原始碼構建 需要編寫makefile gdb 原始碼除錯 json主要的值型別null,false,true,number 數字 string 字串 array 陣列 以及object 物件 其中字串用雙引號...

C json原始碼呼叫

2,挑選需要的 檔案。3,通過codeblacks編譯器驗證原始碼的使用 2,挑選需要的 檔案 jsoncpp src 0.5.0 src lib json jsoncpp src 0.5.0 include json 複製這兩個資料夾下的所有檔案到同乙個資料夾下面,資料夾名字命名為json,如下所...

cJSON原始碼的使用說明

cjson是通訊方面乙個相容性比較好的乙個格式,具體的相關的格式如下 針對資源中的main函式來講解一下使用cjson原始碼的流程和相關的介面 組裝資料報 cjson pjsonroot null pjsonroot cjson createobject if null pjsonroot cjso...