面對(duì)頻繁的數(shù)據(jù)交互需求,用最簡(jiǎn)方式實(shí)現(xiàn)JSON序列化與反序列化已成為開(kāi)發(fā)者必備技能,借助主流庫(kù),輕松實(shí)現(xiàn)零負(fù)擔(dān)數(shù)據(jù)轉(zhuǎn)換。
JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人類閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成。JSON雖源自JavaScript編程語(yǔ)言的子集,但其獨(dú)立于語(yǔ)言,已廣泛用于不同編程環(huán)境與系統(tǒng)之中。
在嵌入式開(kāi)發(fā)中,高效、可靠的JSON解析與生成功能對(duì)于設(shè)備與云端或其他系統(tǒng)之間的數(shù)據(jù)交互至關(guān)重要。為此,LuatOS提供了json核心庫(kù)——無(wú)需額外依賴,即可快速實(shí)現(xiàn)JSON數(shù)據(jù)的生成(序列化)與解析(反序列化)。
目前json庫(kù)已全面支持LuatOS開(kāi)發(fā)系列模組,開(kāi)發(fā)者可根據(jù)項(xiàng)目實(shí)際需求,靈活選用并進(jìn)行快速集成與開(kāi)發(fā)。
一、JSON基礎(chǔ)要點(diǎn)
在LuatOS開(kāi)發(fā)中,使用以下兩個(gè)函數(shù)高效處理JSON數(shù)據(jù)。
API文檔詳見(jiàn):https://docs.openluat.com/osapi/core/json/
1.1 兩個(gè)關(guān)鍵函數(shù)
1)json.encode(obj,t)
功能是將Lua對(duì)象序列化為符合JSON格式的字符串。
注意事項(xiàng):obj參數(shù)僅支持字符串、數(shù)字、布爾值、表、nil類型作為輸入,不支持函數(shù)、用戶數(shù)據(jù)、線程和非空輕量級(jí)用戶數(shù)據(jù)。
序列化成功示例:

序列化失敗示例:

2)json.decode(str)功能是將符合JSON格式的字符串反序列化為L(zhǎng)ua對(duì)象。
注意事項(xiàng):輸入字符串必須是合法的JSON文本,否則會(huì)解析失敗;成功時(shí)返回反序列化結(jié)果和狀態(tài)碼1,失敗時(shí)返回nil、狀態(tài)碼false和錯(cuò)誤信息。
反序列化成功示例:

反序列化失敗示例:

1.2 JSON常用場(chǎng)景
JSON因其簡(jiǎn)潔、通用且靈活的特性,被廣泛應(yīng)用于配置文件、網(wǎng)絡(luò)通信和數(shù)據(jù)存儲(chǔ)等場(chǎng)景。
1)配置文件:
用于應(yīng)用程序的配置設(shè)置。許多工具和框架都直接使用.json文件來(lái)管理配置,因?yàn)樗Y(jié)構(gòu)清晰、易于編輯。
2)網(wǎng)絡(luò)通信:
用于客戶端與服務(wù)器之間的數(shù)據(jù)交換。在前后端分離的開(kāi)發(fā)中,JSON是API接口請(qǐng)求和響應(yīng)的標(biāo)準(zhǔn)數(shù)據(jù)格式。
3)數(shù)據(jù)存儲(chǔ):
用于存儲(chǔ)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。對(duì)于一些結(jié)構(gòu)簡(jiǎn)單的數(shù)據(jù),直接將其存儲(chǔ)為JSON文件,或在數(shù)據(jù)庫(kù)中使用JSON類型字段,都是非常方便的做法。
二、JSON應(yīng)用示例demo
我們提供了豐富的應(yīng)用示例與實(shí)操教程,系統(tǒng)演示JSON序列化與反序列化的各項(xiàng)功能,幫助開(kāi)發(fā)者快速上手。
以Air780EGH核心板為例
2.1 序列化示例
將Lua對(duì)象轉(zhuǎn)為JSON字符串,涵蓋以下核心要點(diǎn):
示例一:Lua string轉(zhuǎn)為JSON string;
示例二:Lua number轉(zhuǎn)為JSON string;
示例三:Lua boolean轉(zhuǎn)為JSON string;
示例四:Lua table轉(zhuǎn)為JSON string;
示例五:Lua nil轉(zhuǎn)為JSON string;
序列化失敗示例和指定浮點(diǎn)數(shù)示例。
核心代碼如下圖示,完整demo詳見(jiàn)源碼倉(cāng)庫(kù)最新文件:

2.2 反序列化示例
將JSON字符串轉(zhuǎn)為L(zhǎng)ua對(duì)象,涵蓋以下核心要點(diǎn):
示例一:JSON string轉(zhuǎn)為L(zhǎng)ua string;
示例二:JSON number轉(zhuǎn)為L(zhǎng)ua number;
示例三:JSON boolean轉(zhuǎn)為L(zhǎng)ua boolean;
示例四:JSON table轉(zhuǎn)為L(zhǎng)ua table;
示例五:JSON nil轉(zhuǎn)為L(zhǎng)ua nil;
反序列化失敗示例;
空表(empty table)轉(zhuǎn)換為JSON時(shí)的說(shuō)明;
字符串中包含控制字符(如 \r\n)的JSON序列化與反序列化說(shuō)明;
json.null 的語(yǔ)義與比較行為說(shuō)明。
核心代碼如下圖示,完整demo詳見(jiàn)源碼倉(cāng)庫(kù)最新文件:

今天的內(nèi)容就分享到這里了~
-
單片機(jī)
+關(guān)注
關(guān)注
6076文章
45492瀏覽量
670158 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2945文章
47812瀏覽量
414743 -
硬件工程
+關(guān)注
關(guān)注
1文章
228瀏覽量
10734 -
嵌入式硬件
+關(guān)注
關(guān)注
1文章
1011瀏覽量
9238
發(fā)布評(píng)論請(qǐng)先 登錄
如何使用Serde進(jìn)行序列化和反序列化
怎么支持PIC32中的JSON解析和序列化
Java序列化的機(jī)制和原理
Virtex ISERDES_NODELAY對(duì)快速4線總線進(jìn)行反序列化怎么實(shí)現(xiàn)?
c語(yǔ)言序列化和反序列化有何區(qū)別
關(guān)于c語(yǔ)言序列化和反序列化的知識(shí)點(diǎn)看完你就懂了
SpringMVC JSON框架的自定義序列化與反序列化
java序列化和反序列化范例和JDK類庫(kù)中的序列化API
static屬性為什么不會(huì)被序列化
什么是序列化 為什么要序列化
如何用C語(yǔ)言進(jìn)行json的序列化和反序列化
Spring Boot時(shí)配置JSON序列化選項(xiàng)的幾種方法
Java序列化怎么使用
極簡(jiǎn)代碼,搞定JSON序列化與反序列化
JSON:簡(jiǎn)潔代碼高效搞定序列化與反序列化
評(píng)論