91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

JSON格式以及cJSON的使用及注意事項(xiàng)

STM32單片機(jī) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-10-16 08:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

STM32 OTA例程中,設(shè)備端(STM32F769探索板)與云端交換數(shù)據(jù)使用的是JSON格式。在本篇文章中,將對(duì)JSON格式以及cJSON的使用及注意事項(xiàng)進(jìn)行說(shuō)明。

JSON格式

JSON(JavaScript Object Notation)是一個(gè)輕量級(jí)的數(shù)據(jù)交換格式。既便于開發(fā)者讀寫,也便于機(jī)器分析和構(gòu)建。它獨(dú)立于開發(fā)語(yǔ)言,是一種文本格式,很適用描述在各個(gè)系統(tǒng)間交換的數(shù)據(jù)。

JSON格式的數(shù)據(jù)看起來(lái)就像下面這個(gè)樣子:

這個(gè)JSON數(shù)據(jù)描述的是Room1的LED燈狀態(tài)以及溫度值。它由一組“名稱(key)”以及對(duì)應(yīng)的“ 值(value)”組成?!懊Q”和“ 值”之間由“ :”分開。各組“名稱:值”對(duì)之間由“,”符號(hào)進(jìn)行分割。

cJSON的使用

針對(duì)不同的開發(fā)語(yǔ)言,網(wǎng)上有很多JSON的實(shí)現(xiàn), demo里使用的是cJSON,版本1.6。它的源碼可以在

https://github.com/DaveGamble/cJSON上下載。

01將cJSON添加到工程

cJSON只有一個(gè)C文件cJSON.c和一個(gè)頭文件cJSON.h。所以只需要將這兩個(gè)文件拷貝到工程文件夾中,并將cJSON.c添加到工程中就可以了。

02數(shù)據(jù)結(jié)構(gòu)

cJSON中使用下面的數(shù)據(jù)結(jié)構(gòu)來(lái)表示JSON數(shù)據(jù)

*next和*prev 指針可以用來(lái)遍歷“矩陣”或者“對(duì)象”類型的JSON數(shù)據(jù)鏈表;這兩種類型的JSON數(shù)據(jù)還會(huì)有一個(gè)子數(shù)據(jù)指針*child

type : 表示該JSON數(shù)據(jù)的類型,比如數(shù)字,字符串、矩陣、對(duì)象等

*valuestring, valueint, valuedouble和*string指針?lè)謩e指向該JSON數(shù)據(jù)類型具體的值,視其類型而定。

03使用cJSON生成JSON數(shù)據(jù)

下面我們看看如何使用cJSON來(lái)生成下面的數(shù)據(jù):

見下面的代碼:

現(xiàn)在就已經(jīng)在cJSON中,構(gòu)件好了和前面的數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)。但現(xiàn)在這個(gè)數(shù)據(jù)結(jié)構(gòu)還不能發(fā)送出去,需要調(diào)用cJSON_Print將其打印成串行的數(shù)據(jù),存放在buffer中,以便后面進(jìn)行發(fā)送。

cJSON_Print執(zhí)行的時(shí)候會(huì)向系統(tǒng)申請(qǐng)一段內(nèi)存來(lái)保存串行化了的數(shù)據(jù),并返回其指針。這里一定要注意的是,cJSON_Print中申請(qǐng)的內(nèi)存,一定要記得釋放(cJSON的代碼中不會(huì)自動(dòng)去做釋放動(dòng)作),否則就會(huì)出現(xiàn)內(nèi)存泄漏。

通過(guò)cJSON_CreateObject創(chuàng)建的對(duì)象,也需要調(diào)用cJSON_Delete來(lái)進(jìn)行刪除并釋放占用的內(nèi)存。否則也會(huì)出現(xiàn)內(nèi)存泄漏。見下面的代碼:

仔細(xì)的同學(xué)可能會(huì)發(fā)現(xiàn)為什么調(diào)用了兩次cJSON_CreateObject,但只看到釋放了其中的device_obj。這里也是需要注意的一個(gè)地方,從前面的代碼中,我們可以看到,reported_obj最終是作為子對(duì)象添加到了device_obj中,所以在刪除device_obj時(shí),cJSON_Delete會(huì)自動(dòng)刪除device_obj中所有的子對(duì)像,故而不需要再調(diào)用cJSON_Delete對(duì)reported_obj進(jìn)行刪除。

04使用cJSON解析JSON數(shù)據(jù)

可以通過(guò)cJSON_Parse()函數(shù)來(lái)解析接收到的JSON數(shù)據(jù),cJSON_Parse()函數(shù)會(huì)對(duì)數(shù)據(jù)進(jìn)行解析,并申請(qǐng)一段內(nèi)存保存解析后的cJSON的數(shù)據(jù)結(jié)構(gòu),并返回指針。

通過(guò)cJSON_GetObjectItem()函數(shù)可以獲取解析后的cJSON數(shù)據(jù)結(jié)構(gòu)中的第一級(jí)子對(duì)象。

使用cJSON_Parse()后,切記也一定要通過(guò)cJSON_Delete釋放之前所申請(qǐng)的內(nèi)存。

下面代碼是對(duì)收到的JSON數(shù)據(jù)的解析過(guò)程。收到的數(shù)據(jù)內(nèi)容為:

總結(jié)

cJSON代碼量不大,用起來(lái)也方便。使用的時(shí)候一定要注意前面提到對(duì)使用完的內(nèi)存空間進(jìn)行釋放。否則會(huì)造成內(nèi)存泄漏。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2309

    文章

    11161

    瀏覽量

    373387
  • JSON
    +關(guān)注

    關(guān)注

    0

    文章

    128

    瀏覽量

    7780

原文標(biāo)題:STM32 FOTA例程之cJSON:就問(wèn)你會(huì)不會(huì)使用!

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    cJSON庫(kù)是什么?

    的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。 cJSON
    發(fā)表于 01-29 07:13

    請(qǐng)問(wèn)CW32F030的硬件注意事項(xiàng)有哪些?

    CW32F030的硬件注意事項(xiàng)有哪些
    發(fā)表于 12-25 08:20

    請(qǐng)問(wèn)IAP功能升級(jí)流程中有哪些注意事項(xiàng)?

    IAP 功能升級(jí)流程中有哪些注意事項(xiàng)?
    發(fā)表于 12-23 07:55

    迅為RK3588開發(fā)板Android系統(tǒng)燒寫及注意事項(xiàng)

    迅為RK3588開發(fā)板Android系統(tǒng)燒寫及注意事項(xiàng)
    的頭像 發(fā)表于 12-03 15:17 ?7161次閱讀
    迅為RK3588開發(fā)板Android系統(tǒng)燒寫及<b class='flag-5'>注意事項(xiàng)</b>

    驅(qū)動(dòng)板PCB布線的注意事項(xiàng)

    PCB Layout 注意事項(xiàng) 1)布局注意事項(xiàng): ●● 整體布局遵循功率回路與小信號(hào)控制回路分開布局原則,功率部分和控制部分的 GND 分開回流到輸入 GND。 ●● 芯片的放置方向優(yōu)先考慮驅(qū)動(dòng)
    發(fā)表于 12-02 07:40

    CW32F030在使用中的注意事項(xiàng)有哪些?

    CW32F030在使用中的注意事項(xiàng)有哪些?
    發(fā)表于 11-18 06:20

    RT1180 XMCD的特點(diǎn)和使用注意事項(xiàng)

    之前在 “XMCD – i.MX RT11xx系列簡(jiǎn)單易用的特定外設(shè)配置功能”的文章給大家介紹了XMCD功能的基礎(chǔ)知識(shí)和用法,不過(guò)前面是以RT1170為例介紹的,本文將基于RT1180著重介紹XMCD的特點(diǎn)以及使用時(shí)的注意事項(xiàng)
    的頭像 發(fā)表于 10-07 11:06 ?1406次閱讀
    RT1180 XMCD的特點(diǎn)和使用<b class='flag-5'>注意事項(xiàng)</b>

    emWin AppWizard 開發(fā)注意事項(xiàng)有哪些?

    emWin AppWizard 開發(fā)注意事項(xiàng)
    發(fā)表于 09-04 06:18

    【NCS隨筆】NCS使用CJSON庫(kù)

    【NCS隨筆】NCS使用CJSON庫(kù) 這個(gè)文章講一下在NCS上面如何使用JSON庫(kù),我使用Hello_world例程添加庫(kù) 宏的配置 CONFIG_LOG =y
    的頭像 發(fā)表于 08-13 15:12 ?628次閱讀
    【NCS隨筆】NCS使用<b class='flag-5'>CJSON</b>庫(kù)

    別讓這些細(xì)節(jié)毀了PCBA!焊接注意事項(xiàng)清單

    一站式PCBA加工廠家今天為大家講講PCBA加工中電子元器件焊接注意事項(xiàng)有哪些?PCBA加工中電子元器件焊接注意事項(xiàng)。 電子元器件焊接關(guān)鍵注意事項(xiàng) 在PCBA加工中,焊接工藝直接影響電路板的可靠性
    的頭像 發(fā)表于 07-23 09:26 ?1196次閱讀

    美國(guó)Odyssey奧德賽電池充電注意事項(xiàng)全解析

    Odyssey奧德賽電池充電注意事項(xiàng)全解析 奧德賽電池作為高性能的深循環(huán)鉛酸電池,廣泛應(yīng)用于汽車啟動(dòng)、摩托車、船舶以及備用電源系統(tǒng)中。正確的充電方法不僅能夠延長(zhǎng)電池壽命,還能保障其性能穩(wěn)定發(fā)揮
    的頭像 發(fā)表于 05-19 16:31 ?1088次閱讀
    美國(guó)Odyssey奧德賽電池充電<b class='flag-5'>注意事項(xiàng)</b>全解析

    IGBT器件的防靜電注意事項(xiàng)

    IGBT作為功率半導(dǎo)體器件,對(duì)靜電極為敏感。我將從其靜電敏感性原理入手,詳細(xì)闡述使用過(guò)程中防靜電的具體注意事項(xiàng)與防護(hù)措施,確保其安全穩(wěn)定運(yùn)行。
    的頭像 發(fā)表于 05-15 14:55 ?1803次閱讀

    設(shè)置射頻網(wǎng)絡(luò)分析儀的測(cè)試條件有哪些注意事項(xiàng)

    射頻網(wǎng)絡(luò)分析儀(VNA)的測(cè)試條件設(shè)置直接影響測(cè)量結(jié)果的準(zhǔn)確性和可靠性。以下從儀器配置、被測(cè)器件(DUT)特性、環(huán)境干擾、校準(zhǔn)與驗(yàn)證四個(gè)維度,系統(tǒng)梳理關(guān)鍵注意事項(xiàng)及解決方案。一、儀器配置與參數(shù)設(shè)置
    發(fā)表于 05-06 16:02

    掃描電鏡的日常維護(hù)有哪些注意事項(xiàng)?

    掃描電鏡日常維護(hù)的注意事項(xiàng)。
    的頭像 發(fā)表于 03-24 11:38 ?1168次閱讀
    掃描電鏡的日常維護(hù)有哪些<b class='flag-5'>注意事項(xiàng)</b>?

    依托raksmart服務(wù)器在多種系統(tǒng)上本地部署deepseek注意事項(xiàng)

    在RAKsmart服務(wù)器上本地部署DeepSeek時(shí),需根據(jù)不同的操作系統(tǒng)和環(huán)境做好全面適配。以下是關(guān)鍵注意事項(xiàng)及分步指南,主機(jī)推薦小編為您整理發(fā)布依托raksmart服務(wù)器在多種系統(tǒng)上本地部署deepseek注意事項(xiàng)。
    的頭像 發(fā)表于 03-19 11:25 ?889次閱讀