如何在嵌入式系统上解析带有jsmn的小JSON文件?

Vin*_*hou 10 embedded json jsonparser jsmn

我需要在嵌入式系统上解析一个小的JSON文件(只有10K RAM /闪存).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] 
]}
Run Code Online (Sandbox Code Playgroud)

jsmn看起来很符合要求,但它不像大多数JSON解析器,因为它只给你令牌.我试过了,但无法理解.

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

Ben*_*ynn 21

jsmn将为您提供一组令牌,这些令牌指的是从左到右的JSON读数中的令牌.

在你的情况下:

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

进行解析的基本代码是:

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);
Run Code Online (Sandbox Code Playgroud)

另一个技巧是获取令牌的价值.令牌包含原始字符串上数据的起点和终点.

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);
Run Code Online (Sandbox Code Playgroud)

有了它,您应该能够找到如何迭代数据.