ESP8266解析JSON数据

使用官方提供的user_json.c和user_json.h。

假设服务器传过来的json数据为   {"v":1} 。

先说明一下几个必要的函数:

1: jsontree_setup(&js,(struct jsontree_value *)&msg_tree,json_putchar); //生成JSON树格式

这个函数的意思应该是让js和自己建的一个msg_tree建立起联系,否则后面调用解析函数时就不知道这个js是什么了。

2:json_parse(&js,DataBuffer); //解析数据

DataBuffer是接收到JSON格式数据,开始解析他。

3:msg_set(struct jsontree_context *js_ctx,struct jsonparse_state *parse)    //解析回调函数

解析后会进入该回调函数,接受数据,保存数据啥的都在这里写。

只要上面那几个函数就可解析一个JSON格式的数据了。


首先注册回调函数:


回调函数注册完成时候需要生成一个JSON树对象,只有有了对象才能进行操作。

 

然后写用于解析的回调函数:


现在所有的工作完成,可以调用了。

DataBuffer就是待解析的JSON数据

简化后全部的程序:

LOCAL int ICACHE_FLASH_ATTR
msg_set(struct jsontree_context *js_ctx,struct jsonparse_state *parse)
{
int type;
while( (type = jsonparse_next(parse)) != 0)
{
if(jsonparse_strcmp_value(parse,"v") == 0)
{
u8 version=0;
jsonparse_next(parse);
jsonparse_next(parse);
version = jsonparse_get_value_as_int(parse);
INFO("version : %d \r\n",version);
}
}
return 0;
}


struct jsontree_callback msg_callback =
JSONTREE_CALLBACK(NULL,msg_set);
JSONTREE_OBJECT(msg_tree,
JSONTREE_PAIR("v",&msg_callback));


void ICACHE_FLASH_ATTR
MassigeHandle(char *DataBuffer)
{
struct jsontree_context js;
jsontree_setup(&js,(struct jsontree_value *)&msg_tree,json_putchar);
json_parse(&js,DataBuffer);
}


你可能感兴趣的:(ESP8266)