當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【cJSon】cJSON学习笔记(一)
生活随笔
收集整理的這篇文章主要介紹了
【cJSon】cJSON学习笔记(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.JSON格式簡述
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。易于人閱讀和編寫,同時也易于機器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。 cJSON是一個超輕巧,攜帶方便,單文件,簡單的可以作為ANSI-C標準的JSON解析器。 接觸yeelink平臺之后,慢慢接觸到JSON格式,雖然一些簡單的情況可以通過string庫函數解析和組裝JSON數據包,但是若有cJSON庫的幫助,解析和組裝JSON數據包的工作便會變得簡單的多,下面就從兩個例子出發說明cJSON數據包的使用方法。
2.JSON結構體
熟悉使用cJSON庫函數可從cJSON結構體入手,cJSON結構體如下所示: [cpp]?view plaincopy#define cJSON_False 0
#define cJSON_True 1
#define cJSON_NULL 2
#define cJSON_Number 3
#define cJSON_String 4
#define cJSON_Array 5
#define cJSON_Object 6
? ??
#define cJSON_IsReference 256
#define cJSON_StringIsConst 512
說明
1.cJOSN結構體為一個雙向列表,并可通過child指針訪問下一層。 2.type變量決定數據項類型(鍵的類型),數據項可以是字符串可以是整形,也可以是浮點型。如果是整形值的話可從valueint,如果是浮點型的話可從valuedouble取出,以此類推。 3.string可理解為節點的名稱,綜合此處的第2點可理解為“鍵”的名稱。3.解析JSON數據包
例如在QCA平臺中讀取一個開關量的結果,向QCA平臺請求之后可以獲得以下JSON數據包: {"timestamp":"2013-11-19T08:50:11","value":1} 在這個JSON數據包中有兩個數據項(鍵值對),一個是時間戳,該時間戳為字符串形式;另一個是開關值,該開關值為整型。該例子主要用于模擬向QCA平臺請求開關量數據。參考代碼
[cpp]?view plaincopy運行結果
value:1 2013-11-19T08:50:11若干說明
1.cJSON_Parse函數負責解析JSON數據包,并按照cJSON結構體的結構序列化整個數據包。使用該函數會通過malloc函數在內存中開辟一個空間,使用完成需要手動釋放。 2.cJSON_GetObjectItem函數可從cJSON結構體中查找某個子節點名稱(鍵名稱),如果查找成功可把該子節點序列化到cJSON結構體中。 3.如果需要使用cJSON結構體中的內容,可通過cJSON結構體中的valueint和valuestring取出有價值的內容(即鍵的值) 4.可通過cJSON_Delete釋放內存空間。4.組裝JSON數據包
組裝數據包的過程和解析數據包的過程相反,下面的例子描述如何組裝以下數據包,該數據包只有一個數據項(鍵值對)。該例子主要用于模擬向QCA平臺上傳傳感器數據。 { ?"value": 123.400000 }參考代碼
[cpp]?view plaincopy若干說明
1.?cJSON_CreateObject函數可創建一個根數據項,之后便可向該根數據項中添加string或int等內容 2. cJSON_AddNumberToObject向節點中添加子節點,例如此處添加value節點,節點值為123.4 3. cJSON_Print函數可以打印根數據項,加入制表符換行符等標識符使得JSON數據包更易閱讀 4. 使用free函數釋放被out占用的內存空間5.總結
整體來說cJSON簡單易用,解決了JSON數據包解析和組裝的問題,幾乎就掌握了CJSON。總結
以上是生活随笔為你收集整理的【cJSon】cJSON学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux系统编程】 浅谈标准I/O缓
- 下一篇: 【cJSON】CJSON学习笔记(二)