12

組み込みシステム(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パーサーとは異なります。試しましたが、わかりませんでした。

誰かがjsmnでそれを解析する方法の例を共有できますか?

4

4 に答える 4

25

jsmnは、JSONの読み取り値の左から右へのトークンを参照するトークンのセットを提供します。

あなたの場合:

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);

もう1つのトリックは、トークンの値を取得することです。トークンには、元の文字列のデータの開始点と終了点が含まれています。

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);

これで、データを反復処理する方法を理解できるはずです。

于 2013-02-05T01:20:14.273 に答える