10、合宙Air模块Luat开发:JSON字符串的⽣成与解析
⽬录
  本系列博客,理论上适⽤于合宙的Air202、Air268、Air720x、Air720S以及最近发布的Air720U(我还没拿到样机,应该也能⽀持)。
  先不管⽀不⽀持,如果你⽤的是合宙的模块,那都不妨⼀试,也许会有意外收获。
  我使⽤的是Air720SL模块,如果在其他模块上不能⽤,那就是底层core固件暂时还没有⽀持,这⾥的代码是没有问题的。例程仅供参考!
⼀、前⾔
1.1、什么是JSON
  JSON(JavaScript Object Notation)是⼀种基于JavaScript语法⼦集的开放标准数据交换格式。JSON是基于⽂本的,轻量级的,通常被认为易于读/写。
  虽然与 JavaScript 紧密相连,但 JSON 与语⾔⽆关。虽然是独⽴的,但 JSON 使⽤与其他语⾔类似的约定(例如,C,C
++,Java,Perl ,Lua和 Python),使 JSON 成为理想的数据交换语⾔。
1.2、为什么要学习JSON
  由于JSON轻量化并且易于使⽤,在客户端和服务器交换数据⽤的⽐较多。
  在阿⾥云的物联⽹平台,设备如果想要上报数据给云平台那就要使⽤的就是JSON字符串。还有⼀些http请求的API接⼝,⽐如京东的天⽓API数据请求后返回的数据也是JSON字符串。JSON的⽤法还有很多,这⾥就不⼀⼀举例了。
⼆、判断⼀个字符串是不是JSON
  以前⽤过JSON的同学可能⼀眼就能看出来下⾯的JSON字符串格式是不是正确的。就算没有学过JSON的同学也能⼤概猜出来下⾯这串字符串⾥⾯包含了什么信息,格式到底有没有错误那也许就不知道了。
安卓在线解析json{
"KEY3":"VALUE3",
"KEY4":"VALUE4",
"KEY2":"VALUE2",
"KEY1":"VALUE1",
"KEY5":{
"KEY5_2":"VALU5_2",
"KEY5_1":"VALU5_1"
},
"KEY6":[1,2,3]
}
  要注意的是我们⼈是⾼等动物,有智商的,就算这个JSON字符串格式是错的,我们也能得到正确的信息。但是机器不⼀样,格式错了就是错了,⼀旦使⽤了错误的JSON字符串那就会导致程序崩溃,⽆法解析出来正确的数据。
  所以我们需要在实验之前验证⼀下这个JSON字符串格式是不是正确的,只需百度搜索JSON在线解析就能得到如下结果。
  选择第⼀个就⾏,进去⼀探究竟。复制上⾯给出的JSON字符串,粘贴在左边的输⼊框,右边的输⼊框⽴即解析出结果,并没有报错,那就说明这个JSON字符串的格式是正确的。
三、编写测试程序
3.1、转化格式
  想要把上⾯的字符串给模块解析,需要经过三个步骤,修改JSON为LUA解释器所能识别的格式。
  第⼀步:复制json到代码中给整个字符串加上双引号
"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 origin ="{\"KEY3\": \"VALUE3\",\"KEY4\": \"VALUE4\",\"KEY2\": \"VALUE2\",\"KEY1\": \"VALUE1\",\"KEY5\": {\"KEY5_2\": \"VALU5_2\",\"KEY5_1\": \"V ALU5_1\"},\"KEY6\": [1, 2, 3]}"
3.2、编写JSON解析程序
local origin ="{\"KEY3\": \"VALUE3\",\"KEY4\": \"VALUE4\",\"KEY2\": \"VALUE2\",\"KEY1\": \"VALUE1\",\"KEY5\": {\"KEY5_2\": \"VALU5_2\",\"KEY5_1\": \"V ALU5_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
3.3、编写JSON⽣成程序
{
KEY1 ="VALUE1",
KEY2 ="VALUE2",
KEY3 ="VALUE3",
KEY4 ="VALUE4",
KEY5 ={KEY5_1 ="VALU5_1", KEY5_2 ="VALU5_2"},            KEY6 ={1,2,3},
}
local jsondata = de(torigin)
log.info("de", jsondata)
四、下载完整程序到开发板验证
  完整代码在此,⾃取

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。