加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于esp8266自带json的使用

(2017-03-21 12:38:29)
分类: MQTT
近段时间用到json封装一些数据,所以就使用了博主“阿秀”,给的一个例子(http://blog.csdn.net/yannanxiu/article/details/50911357),这其间因为一些小的问题,自己折腾了一些时间,看了一些源代码,下面分享一点自己的见解,相互学习。
首先要提到的是几个宏定义,
(1) JSONTREE_CALLBACK,根据结构体
struct jsontree_callback {
    uint8_t type;
    int (* output)(struct jsontree_context *js_ctx);
    int (* set)(struct jsontree_context *js_ctx, struct jsonparse_state *parser);
};
它要注册两个回调函数,分别用于生成json格式数据和解析json格式数据,在解析时,有一个函数json_parse(),会调用注册的set函数,解析数据。另外我们在解析json数据时,会先调用jsontree_setup()函数,个人认为作用在于生成一个我们之前定义的json对象,而这个对象作为json_parse()的一个参数,用于从中得到用于解析的回调函数。在json_parse()函数中随后会调用jsonparse_setup()函数生成解析树,并调用set函数解析。
(2)JSONTREE_OBJECT
这个宏定义存储了对象中的键值对以及个数,在生成json数据中,调用json_ws_send()函数,用于从对象中取得键值对,这里传给json_ws_send()函数的是json数据的最上层对象,在函数中调用find_json_path()获取每一个对象的键值对存入一个结构体
struct jsontree_context {
    struct jsontree_value *values[JSONTREE_MAX_DEPTH];
    uint16_t index[JSONTREE_MAX_DEPTH];
    int (* putchar)(int);
    uint8_t depth;
    uint8_t path;
    int callback_state;
};
同时获取结构体中数据缓存到数组中。
有了这些基本的封装和解析尝试,便可以将封装的数据publish到代理,同时subscribe数据,并解析获取想要数据。

0

阅读 收藏 喜欢 打印举报/Report
后一篇:ping程序
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有