0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

极简代码,搞定JSON序列化与反序列化

青山老竹农 来源:jf_82863998 作者:jf_82863998 2026-02-23 21:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

JSONJavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。LuatOS提供了json核心库——无需额外依赖,即可快速实现JSON数据的生成(序列化)与解析(反序列化)。

目前json库已全面支持LuatOS开发系列产品,开发者可根据项目实际需求,灵活选用并进行快速集成与开发。

一、JSON基础要点

在LuatOS开发中,使用以下两个函数高效处理JSON数据。

1.1 两个关键函数

1)json.encode(obj,t)

功能是将Lua对象序列化为符合JSON格式的字符串。

注意事项:
obj参数仅支持字符串、数字、布尔值、表、nil类型作为输入,不支持函数、用户数据、线程和非空轻量级用户数据。

序列化成功示例:

wKgZPGmcWI6AYxIQAAMaL_-_hz8829.png

序列化失败示例:

wKgZO2mcWKaAdyjdAAQrI4lRX7c980.png

2)json.decode(str)
功能是将符合JSON格式的字符串反序列化为Lua对象。

注意事项:
输入字符串必须是合法的JSON文本,否则会解析失败;成功时返回反序列化结果和状态码1,失败时返回nil、状态码false和错误信息。

反序列化成功示例:

wKgZPGmcWL6ABElmAAN_DLsvKQE423.png

反序列化失败示例:

wKgZPGmcWNWARIBtAAPv4PSf-TQ320.png

1.2 JSON常用场景

JSON因其简洁、通用且灵活的特性,被广泛应用于配置文件、网络通信和数据存储等场景。

1)配置文件:

用于应用程序的配置设置。许多工具和框架都直接使用.json文件来管理配置,因为它结构清晰、易于编辑。

2)网络通信:

用于客户端与服务器之间的数据交换。在前后端分离的开发中,JSON是API接口请求和响应的标准数据格式。

3)数据存储:

用于存储简单的数据结构。对于一些结构简单的数据,直接将其存储为JSON文件,或在数据库中使用JSON类型字段,都是非常方便的做法。


二、JSON应用示例demo

丰富的应用示例与实操教程,系统演示JSON序列化与反序列化的各项功能,帮助开发者快速上手。

Air780EGH核心板为例:

wKgZPGmcWdWAT_s7ABgzHmU0f2o291.png

2.1 序列化示例

将Lua对象转为JSON字符串,涵盖以下核心要点:

示例一:Lua string转为JSON string;

示例二:Lua number转为JSON string;

示例三:Lua boolean转为JSON string;

示例四:Lua table转为JSON string;

示例五:Lua nil转为JSON string;

序列化失败示例和指定浮点数示例。

核心代码如下图示,完整demo详见源码仓库最新文件:

wKgZPGmcWS6AI9cpAAmJ8EO051U911.png

2.2 反序列化示例

将JSON字符串转为Lua对象,涵盖以下核心要点:

示例一:JSON string转为Lua string;

示例二:JSON number转为Lua number;

示例三:JSON boolean转为Lua boolean;

示例四:JSON table转为Lua table;

示例五:JSON nil转为Lua nil;

反序列化失败示例;

空表(empty table)转换为JSON时的说明;

字符串中包含控制字符(如 rn)的JSON序列化与反序列化说明;

json.null 的语义与比较行为说明。

核心代码如下图示,完整demo详见源码仓库最新文件:

wKgZO2mcWVyAOYaGAAlXFTDSyzA323.png


今天的内容就分享到这里了

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Lua
    Lua
    +关注

    关注

    0

    文章

    90

    浏览量

    11507
  • JSON
    +关注

    关注

    0

    文章

    129

    浏览量

    7808
  • LuatOS
    +关注

    关注

    0

    文章

    169

    浏览量

    2745
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    JSON:简洁代码高效搞定序列化反序列化

    面对频繁的数据交互需求,用最方式实现JSON序列化反序列化已成为开发者必备技能,借助主流库,轻松实现零负担数据转换。JSON(JavaS
    的头像 发表于 02-25 19:04 211次阅读
    <b class='flag-5'>JSON</b>:简洁<b class='flag-5'>代码</b>高效<b class='flag-5'>搞定</b><b class='flag-5'>序列化</b>与<b class='flag-5'>反序列化</b>

    IO序列化操作:提升系统互操作性的关键技术

    在异构系统并存的今天,IO序列化操作成为实现系统间互操作性的核心技术。通过标准的数据格式(如JSON、Protobuf、Hessian等),不同语言、平台的系统得以无缝交换信息。合理设计序列
    的头像 发表于 02-25 16:02 181次阅读
    IO<b class='flag-5'>序列化</b>操作:提升系统互操作性的关键技术

    【ioqueue】 IO序列化操作全解析

    从内存对象到可存储或可传输的字节流,IO序列化操作完成了数据形态的转化。这一过程不仅涉及编码与解码逻辑,还需处理版本兼容、安全性与性能开销等问题。全面掌握这一技术路径,有助于构建更加健壮的应用系统
    的头像 发表于 02-24 19:22 199次阅读
    【ioqueue】 IO<b class='flag-5'>序列化</b>操作全解析

    深入剖析LMH0030:SMPTE标准数字视频序列化器的卓越之选

    深入剖析LMH0030:SMPTE标准数字视频序列化器的卓越之选 在当今数字的时代,数字视频处理技术日新月异。对于电子工程师而言,选择一款性能卓越、功能丰富的数字视频序列化器至关重要。今天,我们
    的头像 发表于 12-30 14:00 409次阅读

    深入解析LM2512A:高性能RGB显示接口序列化

    深入解析LM2512A:高性能RGB显示接口序列化器 在电子设备的显示领域,如何高效、稳定地传输高质量的图像数据是一个关键问题。TI的LM2512A作为一款专门的移动像素链路(MPL - 1)24位
    的头像 发表于 12-26 11:30 548次阅读

    SN65HVS885:工业自动的理想数字输入序列化

    SN65HVS885:工业自动的理想数字输入序列化器 在工业和建筑自动领域,对于高通道密度数字输入模块的需求日益增长。德州仪器(TI)的SN65HVS885作为一款八通道数字输入序列化
    的头像 发表于 12-25 11:00 570次阅读

    深度解析DS90UH929-Q1:720p HDMI 到 FPD-Link III 桥接序列化

    深度解析DS90UH929-Q1:720p HDMI 到 FPD-Link III 桥接序列化器 在电子工程师的日常工作中,选择一款合适的器件来实现特定功能至关重要。今天,我们聚焦于德州仪器(TI
    的头像 发表于 12-22 15:50 529次阅读

    DS90UH947-Q1:1080p OpenLDI至FPD - Link III序列化器的深度解析

    DS90UH947-Q1:1080p OpenLDI 至 FPD - Link III 序列化器的深度解析 在当今的电子设备领域,视频传输技术的发展日新月异,对于高质量、高速率视频传输的需求也越来越
    的头像 发表于 12-22 15:40 467次阅读

    探索DS90UH981-Q1:4K DSI到FPD-Link IV桥接序列化器的卓越性能

    探索DS90UH981-Q1:4K DSI到FPD-Link IV桥接序列化器的卓越性能 在当今的电子设备设计领域,对于高速、可靠且功能强大的视频传输解决方案的需求与日俱增。DS90UH981-Q1
    的头像 发表于 12-17 11:15 630次阅读

    轻量级参数的管理框架(C语言)

    反序列化操作。 方便在本地储存设备(如flash、eeprom等)保存/读取二进制数据,甚至还可以跨设备传输使用 提供了两种方式: 第一种:只需要提供参数数据保存/加载的回调函数,调用相关接口函数
    发表于 12-16 06:24

    燃料电池EIS测试之负载方案 — 助力氢能产业蓬勃发展

    艾诺大功率直流电子负载AN23600E系列采用全新一代数字控制器,内置五大基本模式以及七大进阶模式,同时提供了序列化功能,满足使用者的编程、自动测试等多种需求。
    的头像 发表于 11-21 14:07 699次阅读
    燃料电池EIS测试之负载方案 — 助力氢能产业蓬勃发展

    TaskPool和Worker的对比分析

    TaskPoolWorker内存模型线程间隔离,内存不共享。线程间隔离,内存不共享。 参数传递机制采用标准的结构克隆算法(Structured Clone)进行序列化反序列化,完成参数传递。 支持ArrayBuffer
    发表于 06-18 06:43

    鸿蒙5开发宝藏案例分享---跨线程性能优化指南

    为什么拖慢性能? 当对象跨线程传递时(比如主线程→子线程),系统会 自动序列化反序列化 。如果对象结构复杂(比如嵌套数组、类方法),耗时会暴增!举个例子: // 未优化的写法:传递整个对象
    发表于 06-12 17:13

    快手上线鸿蒙应用高性能解决方案:数据反序列化性能提升90%

    普通对象(如 JSON 数据)与类实例进行互转,是实现面向对象编程与数据序列化解耦的核心工具。随着业务复杂度的提升,该库在反序列化过程中逐渐暴露出性能瓶颈,影响用户核心体验。因此
    发表于 05-15 10:01

    spartan 6 14位LVDS 反序列化

    spartan 6系列的FPGA 与14位ADC 输出LVDS信号 怎么实现1:14的串转并呢?iserdes2 在ise里面最高只能实现8位啊
    发表于 04-25 15:20