json - 如何在嵌入式系统上用 jsmn 解析一个小的 JSON 文件?

标签 json embedded jsonparser jsmn

我需要在嵌入式系统(只有 10K RAM/闪存)上解析一个小的 JSON 文件。 JSON 是:

{
"data1":[1,2,3,4,5,6,7,8,9],
"data2":[
     [3,4,5,6,1],
     [8,4,5,6,1],
     [10,4,5,3,61],
     [3,4,5,6,1],
     [3,4,5,6,1],
     [3,4,5,6,1] 
]}

jsmn 看起来很符合要求,但它不像大多数 JSON 解析器,因为它只给你 token 。我试过了,但无法弄清楚。

有人可以分享一个如何用 jsmn 解析它的例子吗?

最佳答案

jsmn 会为您提供一组从左到右阅读 JSON 中的 token 的 token 。

在你的情况下:

token[0]: (outer) object, 2 children
token[1]: string token ("data1")
token[2]: array, 9 children
token[3]: primitive token (1)
etc...

进行解析的基本代码是:
int resultCode;
jsmn_parser p;
jsmntok_t tokens[128]; // a number >= total number of tokens

jsmn_init(&p);
resultCode = jsmn_parse(&p, yourJson, tokens, 256);

另一个技巧是获取 token 的值(value)。 token 包含原始字符串上数据的起点和终点。
jsmntok_t key = tokens[1];
unsigned int length = key.end - key.start;
char keyString[length + 1];    
memcpy(keyString, &yourJson[key.start], length);
keyString[length] = '\0';
printf("Key: %s\n", keyString);

有了它,您应该能够弄清楚如何迭代数据。

关于json - 如何在嵌入式系统上用 jsmn 解析一个小的 JSON 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388692/

相关文章:

javascript - $.ajax json GET 在页面加载后恢复所有 jquery

javascript - 反序列化 JSON 日期无时区

Linux 输入设备事件,如何检索初始状态

json - 在 activiti bpmn 中解析 JSON 字符串

c# - 如何从 UWP 中的 Assets 文件夹中解析 JSON 文件 - 已关闭

php - 在 MySQL 中存储多个值以应对不可告人的 "like %"请求的最佳方法?

assembly - ARM架构中的GT和HI指令有什么区别?

embedded - 为 ARM Thumb2 寻找高效的整数平方根算法

javascript - 如何将以下内容转换为有效的 JSON?

java - 如何使用java获取json中的数组?