news 2026/5/10 3:08:33

基于MQTT通讯UNIapp程序解析JSON数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于MQTT通讯UNIapp程序解析JSON数据

1、解析函数无法解析{“ligh”:0010}不规范的JSON数

//解析函数无法解析{“ligh”:0010}不规范的JSON数据
if (e.method === 'receive') {//e 是 MQTT 事件对象,e.method 表示事件类型。当接收到 MQTT 消息时,method 的值是 'receive'
try {//try 语句开始一个错误处理块。如果块内的代码出现错误,会跳转到 catch 块,防止程序崩溃。
const data = typeof e.data === 'string'//检查 e.data 的数据类型是否是字符串,
? JSON.parse(e.data)//是字符串,使用 JSON.parse() 将其解析为 JavaScript 对象
: e.data//如果不是字符串(可能已经是对象),直接使用原值

if (data.ligh !== undefined) this.ligh = Number(data.ligh)//符串 "0010" → 数字 10(自动去掉前导0)
if (data.mode !== undefined) this.mode = Number(data.mode)

} catch (err) {//如果 try 块中的代码出现错误(比如 JSON 格式错误),会跳转到这里
console.error('JSON 解析失败', err)
}
}

2、修改:这个方案能稳定处理{"ligh":0010}这种格式,并且有很好的兼容性

if (e.method === 'receive') {
console.log('收到数据:', e.data)

// 将数据转为字符串处理
const rawData = String(e.data)

// 专用解析函数
const parseHardwareFormat = (str) => {
const result = {}

// 匹配 ligh:0010 或 "ligh":0010
const lighMatch = str.match(/ligh["]?\s*[:=]\s*0*(\d+)/i)// (只支持整数)
if (lighMatch) {
result.ligh = parseInt(lighMatch[1], 10)
}

// 匹配 mode:1 或 "mode":1
const modeMatch = str.match(/mode["]?\s*[:=]\s*0*(\d)/i)// (只支持整数)
if (modeMatch) {
result.mode = parseInt(modeMatch[1], 10)
}

return result
}

// 解析数据
const data = parseHardwareFormat(rawData)
console.log('解析结果:', data)

// 更新到组件
if (data.ligh !== undefined) this.ligh = data.ligh
if (data.mode !== undefined) this.mode = data.mode
}

程序解析:

const lighMatch = str.match(/ligh["]?\s*[:=]\s*0*(\d+)/i)解释下

1.//i

  • /:正则表达式的开始和结束分隔符

  • /i:忽略大小写标志,ligh可以匹配lighLIGHLigh

2.ligh

  • 匹配字面字符串"ligh"

  • 因为/i标志,也匹配LIGHLigh

3.["]?

  • ["]:匹配一个双引号字符"

  • ?:表示前面的字符可选(0次或1次)

  • 作用:匹配可能有引号也可能没有的情况

  • 示例:

    • "ligh"✓(有引号)

    • ligh✓(没有引号)

4.\s*

  • \s:匹配任意空白字符(空格、制表符、换行等)

  • *:表示前面的字符出现0次或多次

  • 作用:匹配键值对之间的空白

  • 示例:

    • ligh:0010✓(没有空格)

    • ligh :0010✓(有空格)

    • ligh :0010✓(多个空格)

5.[:=]

  • [:=]:字符集合,匹配:=

  • 作用:匹配分隔符

  • 示例:

    • ligh:0010✓(使用冒号)

    • ligh=0010✓(使用等号)

6.\s*

  • 再次匹配可能的空白字符

  • 示例:

    • ligh: 0010✓(分隔符后有空格)

    • ligh:0010✓(没有空格)

7.0*

  • 0:匹配数字0

  • *:0次或多次

  • 作用:匹配前导零

  • 示例:

    • 0010→ 匹配00

    • 10→ 匹配空(没有前导0)

    • 0→ 匹配0

8.(\d+)

  • \d:匹配数字(0-9)

  • +:1次或多次

  • ():捕获分组,提取匹配的内容

  • 作用:捕获实际的数值部分(去掉前导0后的数字)

  • 示例:

    • 0010→ 捕获10

    • 4100→ 捕获4100

    • 0→ 捕获0

测试结果:

"{"ligh":0010}" → 匹配组: "10" → 数值: 10 "{ligh:0020}" → 匹配组: "20" → 数值: 20 ""ligh":0030" → 匹配组: "30" → 数值: 30 "ligh=0040" → 匹配组: "40" → 数值: 40 "ligh : 0050" → 匹配组: "50" → 数值: 50 "LIGH:0060" → 匹配组: "60" → 数值: 60 ""LIGH" = 0070" → 匹配组: "70" → 数值: 70 "ligh:0" → 匹配组: "0" → 数值: 0 "ligh:100" → 匹配组: "100" → 数值: 100

3、如果要增加解析{“ligh”:0.12}在这种浮点数呢

//支持不规则JSON整数与浮点数
if (e.method === 'receive') {
console.log('收到数据:', e.data)

// 将数据转为字符串处理
const rawData = String(e.data)

// 专用解析函数
const parseHardwareFormat = (str) => {
const result = {}

// 匹配 ligh:0010 或 "ligh":00.10
const lighMatch = str.match(/ligh["]?\s*[:=]\s*(\d*\.?\d+)/i)// (支持整数和小数)
if (lighMatch) {
// 使用 parseFloat 自动处理整数和小数
this.ligh = parseFloat(lighMatch[1])
console.log('光照值:', this.ligh)
}

// 匹配 mode:1 或 "mode":1
// mode 通常用整数
const modeMatch = rawData.match(/mode["]?\s*[:=]\s*(\d+)/i)
if (modeMatch) {
this.mode = parseInt(modeMatch[1], 10)
}
return result
}

// 解析数据
const data = parseHardwareFormat(rawData)
console.log('解析结果:', data)

// 更新到组件
if (data.ligh !== undefined) this.ligh = data.ligh
if (data.mode !== undefined) this.mode = data.mode
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 7:12:28

SGMICRO圣邦微 SGM7SZ08YN5G/TR SOT23-5 逻辑门

特性 宽供电电压范围:1.65V至5.5V超高速:在Vcc3.3V时,tPp为3.6纳秒(典型值),输入至50皮法电容 支持在Vcc3.3V时的LCX性能 高输出驱动:在Vcc3V时为士24mA输入过压容限支持5V至3V转换 电源关闭时高阻抗输入/输出 提供绿色SOT-23-5、SC70-5、XTDFN-1x1-6L和…

作者头像 李华
网站建设 2026/5/10 21:10:18

强噪声铁路货车轴承复合故障诊断【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅ 成品或定制,查看文章底部微信二维码(1)李雅普诺夫指数引导的全变分自适应降噪与排列熵优化解…

作者头像 李华
网站建设 2026/5/10 4:30:33

异常筛选城轨列车轴承迁移学习故障诊断

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。✅ 专业定制毕设、代码✅ 成品或定制,查看文章底部微信二维码(1)伪标签迭代提纯与图神经网络增强的半监督迁移城轨列车…

作者头像 李华
网站建设 2026/5/10 19:08:18

体悬式高速列车机电耦合特性与故障【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 成品或定制,查看文章底部微信二维码 (1) 高速列车牵引传动系统机电耦合动力学精细化建模方法 高速列车驱动系统是…

作者头像 李华
网站建设 2026/5/9 15:26:08

吐血推荐!专科生必用AI论文软件TOP8:开题报告文献综述全搞定

吐血推荐!专科生必用AI论文软件TOP8:开题报告文献综述全搞定 2026年专科生论文写作工具测评:为何需要这份榜单? 随着AI技术在学术领域的广泛应用,越来越多的专科生开始借助AI论文软件提升写作效率。然而,…

作者头像 李华