json数据处理
一、简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它基于 JavaScript 编程语言的一个子集,但独立于语言,广泛用于不同编程环境中。是基于 ECMAScript 的一个子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。JSON 独立于语言设计,很多编程语言都支持 JSON 格式的数据交换。JSON 是一种常用的数据格式,在电子数据交换中有多种用途,包括与服务器之间的 Web 应用程序的数据交换。其简洁和清晰的层次结构有效地提升了网络传输效率,使其成为理想的数据交换语言。其文件通常使用扩展名.json。
二、演示功能概述
本教程教你如何用 Air724 开发板,生成与解析 JSON 格式数据,并通过日志观察实验结果。
三、准备硬件环境
3.1 开发板准备
使用 EVB_Air724 开发板,如下图所示:
淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接 ;
此开发板的详细使用说明参考:Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。
api:https://doc.openluat.com/wiki/21?wiki_page_id=2068
3.2 数据通信线
USB 数据线一根(micro USB)。
3.3 PC 电脑
WIN7 以及以上版本的 WINDOWS 系统。
3.4 SIM 卡
中国大陆环境下,可以上网的 SIM 卡。一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。
3.5 组装硬件环境
USB 数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,SIM 卡放到 SIM 卡槽中锁紧,如下图所示。
四、准备软件环境
4.1 下载调试工具
使用说明参考:Luatools 下载和详细使用
4.2 源码及固件
1.底层 core 下载
下载底层固件,并解压
链接:https://docs.openluat.com/air724ug/luatos/firmware/
如下图所示,红框的是我们要使用到的
2.本教程使用的 demo 见附件:
https://gitee.com/openLuat/LuatOS-Air724UG/tree/master/script_LuaTask/demo/json
4.3 下载固件和脚本到开发板中
打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。
点击项目管理测试选项。
进入管理界面,如下图所示。
- 点击选择文件,选择底层固件,我的文件放在 D:\luatOS\Air724 路径中
- 点击增加脚本或资源文件,选择 之前下载的程序源码,如下图所示。
- 点击下载底层和脚本,下载完成如下图所示。
五、代码示例介绍
5.1 API 说明
json.encode(torigin)
json 编码
JSON 有自己规定的格式,一点的格式错误都无法 JSON 解析出有效数据。这里我们提供了 JSON 编码函数,你只需要把有效数据放入 table 类型的变量中,然后传入 JSON 编码函数 json.encode(table 类型变量),他就会返回 JSON 有效字符串。
参数
参数 类型 释义 取值
torigin table 待编译的源字符
返回值
返回值 类型 释义 取值
res string json 格式字符串
例子
local torigin =
{
KEY1 = "VALUE1",
KEY2 = "VALUE2",
KEY3 = "VALUE3",
KEY4 = "VALUE4",
KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
KEY6 = {1,2,3},
}
local jsondata = json.encode(torigin)
json.decode(origin)
json 解析
JSON 解析也很简单,有解析函数 json.decode(origin),origin 是待解析的 JSON 字符串。他会返回三个值(解析的内容,解析结果,错误信息)当 JSON 有效字符串被解析后,有效的数据就会被放在 table 的变量里,你需要定义一个变量接收一下。接着你就可以对 table 变量处理获取有效值。
参数
返回值
例子
_-- 正确json字符串_local wrongOrigin = "{\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"local origin = "{\"KEY3\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"local tjsondata,result,errinfo = json.decode(origin)
if result thenprint(tjsondata["KEY1"])print(tjsondata["KEY2"])print(tjsondata["KEY3"])print(tjsondata["KEY4"])print(tjsondata["KEY5"]["KEY5_1"],tjsondata["KEY5"]["KEY5_2"])print(tjsondata["KEY6"][1],tjsondata["KEY6"][2],tjsondata["KEY6"][3])
elseprint("json.decode error",errinfo)
end
5.2 testJson.lua 代码
先是定义了一个 torigin 的 table 变量来存有效数据,这里需要注意是 table 类型。接下来直接调用 JSON 编译函数 json.encode(torigin),并把返回值赋给 jsondata 。JSON 编译函数返回的是编译后的 JSON 有效字符串,并且显示出来。
JSON 正确字符串的解析结果,定义了一个正确的(注意转义字符的使用)。然后定义了三个变量来接受 JSON 解析函数的返回值。local tjsondata,result,errinfo = json.decode(origin),第一个返回值是解析出来的内容,table 类型,第二个是解析结果,bool 类型,第三个是错误信息。如果一切成功解析出结果,你就可以打印出解析出的数据了,如果解析失败则会返回失败信息。这里只测试了正确的 JSON 字符串,可以更换 json.decode(origin)的参数,测试一下错误 JSON 字符串的情况。
--- 模块功能:JSON功能测试.
-- @author openLuat
-- @module json.testJson
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.28
-----------------------encode测试------------------------
local torigin =
{
KEY1 = "VALUE1",
KEY2 = "VALUE2",
KEY3 = "VALUE3",
KEY4 = "VALUE4",
KEY5 = {KEY5_1="VALU5_1",KEY5_2="VALU5_2"},
KEY6 = {1,2,3},
}
local jsondata = json.encode(torigin)
log.info("testJson.encode",jsondata)
-----------------------encode测试------------------------
-----------------------decode测试------------------------
--{"KEY3":"VALUE3","KEY4":"VALUE4","KEY2":"VALUE2","KEY1":"VALUE1","KEY5":{"KEY5_2":"VALU5_2","KEY5_1":"VALU5_1"}},"KEY6":[1,2,3]}
local origin = "{\"KEY3\":\"VALUE3\",\"KEY4\":\"VALUE4\",\"KEY2\":\"VALUE2\",\"KEY1\":\"VALUE1\",\"KEY5\":{\"KEY5_2\":\"VALU5_2\",\"KEY5_1\":\"VALU5_1\"},\"KEY6\":[1,2,3]}"
local tjsondata,result,errinfo = json.decode(origin)
if result and type(tjsondata)=="table" then
log.info("testJson.decode KEY1",tjsondata["KEY1"])
log.info("testJson.decode KEY2",tjsondata["KEY2"])
log.info("testJson.decode KEY3",tjsondata["KEY3"])
log.info("testJson.decode KEY4",tjsondata["KEY4"])
log.info("testJson.decode KEY5",tjsondata["KEY5"]["KEY5_1"],tjsondata["KEY5"]["KEY5_2"])
log.info("testJson.decode KEY6",tjsondata["KEY6"][1],tjsondata["KEY6"][2],tjsondata["KEY6"][3])
else
log.info("testJson.decode error",errinfo)
end
-----------------------decode测试------------------------
5.3 main.lua 代码
本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,等待网络连接成功,然后加载测试模块。
六、开机调试
6.1 开发板开机
连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。
6.2 功能调试
1.JSON 编译
直接调用 JSON 编译函数 json.encode(torigin),并把返回值赋给 jsondata 。JSON 编译函数返回的是编译后的 JSON 有效字符串,并且显示出来。
2.JSON 解析
JSON 正确字符串的解析结果,定义了一个正确的(注意转义字符的使用)。然后定义了三个变量来接受 JSON 解析函数的返回值。local tjsondata,result,errinfo = json.decode(origin),第一个返回值是解析出来的内容,table 类型,第二个是解析结果,bool 类型,第三个是错误信息。如果一切成功解析出结果。
七、常见问题
7.1 自己添加的 JSON 字符串解析失败
搜索 JSON 解析网页,先把这段 JSON 字符串放进网页里看 JSON 格式是否正确。如果正确,在看看自己代码里的转义字符有没有加对加全
7.2 json.encode()这个 api 生成的 json 顺序是随机的吗?
是的。
给读者的话
本篇文章由
杨超
开发;本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;
请登录合宙技术交流论坛,点击文档找错赢奖金-Air724UG-LuatOS-软件指南-通用工具库-JSON数据处理;
用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;
我们会迅速核实并且修改文档;
同时也会为您累计找错积分,您还可能赢取月度找错奖金!