拿来即用:用C+JS结构来处理JSON数据
【面对的问题】
在物联网产品的开发过程中,对JSON格式的数据处理是一个强需求,例如亚马逊的 AWS IOT平台,设备与后台之间的通讯数据都是JSON格式,先瞄一眼大概的样子:

这是一个真实产品的通讯数据,设备端的代码C代码中利用cJSON这个开源工具来完成JSON字符的解析和组装工作。代码我这里就不贴了,解析函数很长,要滚动好多次鼠标滑轮。而且一不注意释放资源就会发生内存泄漏!
那么,是否有更好的方式来解决这个问题呢?
答案就是这篇文章介绍的duktape引擎!
【Duktape简介】
这里只是简单介绍下duktape,详细的介绍大家自己去google。
Duktape 是一个嵌入式 Javascript引擎,专注于可移植性和空间占用。
易于集成到C/C++项目中,使用API实现C代码与JS代码的双向调用。
【代码说明】
1.文件说明

duktape.c:引擎主要C文件。
duktape.h:引擎头文件。
main.c : main函数所在文件。
main.js :Javascript文件,处理业务逻辑的代码就放在这里。
Makefile : 编译脚本。
miniz.c :有时候为了js代码的保密,不能把js源码放到最终产品中,需要压缩和混淆;加载的时候再进行解压。
2.核心步骤

当C代码中需要对JSON格式的字符串进行处理时,把JSON数据通过栈结构传给JS程序,在JS程序中处理数据之后,把处理结果再返回给C程序中。
在JS程序中,如果有些操作无法处理(例如:发送数据给串口),那么就调用C程序中的函数来处理。
3.代码说明





【测试环境】
1. x86系统
我是在 Ubuntu16.04 下测试的,使用系统自带 gcc 编译器。
2.嵌入式系统
只需要把编译器换成对应的交叉编译器即可。
【END】
1.这是原创文章,请尊重版权。如需转载,请保留全部内容并注明来源。如果方便的话,请联系我确认。
2.文章中如有错误,或者希望交流、探讨相关内容,非常欢迎联系我。
3.邮箱:sewain@126.com
4.公众号:IOT物联网小镇
拿来即用:用C+JS结构来处理JSON数据的更多相关文章
- js进阶ajax读取json数据(ajax读取json和读取普通文本,和获取服务器返回数据(链接)都是一样的,在url处放上json文件的地址即可)
js进阶ajax读取json数据(ajax读取json和读取普通文本,和获取服务器返回数据(链接)都是一样的,在url处放上json文件的地址即可) 一.总结 ajax读取json和读取普通文本,和获 ...
- c# 利用结构体获取json数据
最近做微信支付,要获取用户的openid,调用接口后返回的是json格式的数据,我想在c#后台把数据逐一取出,网上查了查,找到以下方法: 1.首先调用接口,要有一个post数据到指定url并返回数据的 ...
- js中如何操作json数据
一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...
- 前台js接收后台的json数据
后台返回的json数据,如php的: return json_encode($data); 在前台 js接收如下: function json2object(str){ var jsstr = str ...
- 问题集录--JS如何处理和解析Json数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...
- Go语言使用匿名结构体解析JSON数据
手机拥有屏幕.电池.指纹识别等信息,将这些信息填充为 JSON 格式的数据.如果需要选择性地分离 JSON 中的数据则较为麻烦.Go 语言中的匿名结构体可以方便地完成这个操作. 首先给出完整的代码,然 ...
- js中读取解析json数据
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键. JSON字符串: 'var str1 = ' ...
- 使用node.js编写脚本将JSON数据转换为SQL语句
安装依赖模块 当node.js脚本在运行的时候,需要很多支持模块,这些模块存储在node_modules文件夹中.该脚本在执行过程中需要使用到fs.string-format两个支持模块,作用分别是: ...
- node.js学习笔记之json数据转string
Node.js中的JSON问题 var str = '{"dir":"kunhony","param":"archive&qu ...
随机推荐
- data类型的url
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Ta ...
- ie时间格式NAN-NAN-NAN
js的日期对象可以识别的日期字符串有四种: 1.YYYY-MM-DD 2019-11-11 01:01:012.MM-DD-YYYY 11-11-2019 01:01:013.YYYY/MM/DD 2 ...
- jchdl - GSL实例 - Mux4
https://mp.weixin.qq.com/s/hh0eExVFC6cxzpvNI1cA9A 使用门实现四选一选择器. 原理图 参考链接 https://github.com/wjcdx/ ...
- SpringBoot 之 拦截配置 与SpringCloud
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.SpringBoot 与 SpringMVC 的区别? SpringMVC是基于Spring的MV ...
- ES 或 Solr 分词器的相关面试题:
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.ES 中的 IK 分词器能分中文和英语的原因是什么? ik分词器为中文分词器,默认可对中文分词:通过 ...
- Java实现 LeetCode 719 找出第 k 小的距离对(二分搜索法+二分猜数字)
719. 找出第 k 小的距离对 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入: nums = [1,3, ...
- Java实现 LeetCode 543. 二叉树的直径(遍历树)
543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过也可能不穿过根结点. 示例 : 给定二叉树 1 / \ 2 3 / ...
- Java实现无向图的欧拉回路判断问题
1 问题描述 Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试 ...
- 【Nodejs】HTML 实时同步(类似Vue实时同步刷新文件->浏览器)
1. 安装 Node.js BrowserSync是基于Node.js的, 是一个Node模块, 如果您想要快速使用它,也许您需要先安装一下Node.js安装适用于Mac OS,Windows和Lin ...
- vs2019离线下载安装包
官方的离线安装说明-->点击打开 1.下载 vs2019引导程序 ,选择你所需的版本下载,我选择了企业版 vs_enterprise__184447765.1558180718.exe 2.设置 ...