stc32使用cjosn记录贴
本帖最后由 zhange 于 2024-5-25 15:41 编辑最近学到iic了,想驱动12864屏做个天气预报,通过8266可以获取去到天气数据,但是都是json格式,听人说可以用下cjosn,现学现用。
结束了没成功以后成功了再来
在visual studio里边测试的好好的为啥移动到keil不行了
在visual studio里运行结果
1.下载cjson压缩包
里边只用到了
cJSON.c
cJSON.h
v1.7.18版本
二:JSON语法规则
[*]json对象是一个无序的"名称值"键值对的集合,以"{"开始,以"}"结束,
[*]允许嵌套使用 每个名称和值成对出现,名称和值之间使用":"分隔; 键值对之间用","分隔
[*]在这些字符前后允许存在无意义的空白符;
对于键值,可以有如下值
[*]一个新的json对象
[*]数组使用"[“和"]"表示
[*]数字直接表示,可以是整数,也可以是浮点数
[*]字符串:使用引号"表示
[*]字面值:false、nul、true中的一个(必须是小写)
本帖最后由 zhange 于 2024-5-24 08:28 编辑
三:基本流程
1.创建cJSON指针
2.解析整段json数据,返回cJSON指针
3.根据键值对的名称从链表中取出对应的值,返回该键值对的地址
4.根据类型提取相关值
5.释放
全是英文,英语差了耽误学习呀
parse
分解;解析
[例句] the student's ability to parse a sentence
学生解析句子的能力 四:初次尝试
#include "cJSON.h"
#include "stdio.h"
int main ()
{
const char* data = { "{\"results\":0000,\"xingbie\":\"nan\"}" };
//1.创建cJSON指针
cJSON * ceshi = NULL;
//2.解析整段数据, 返回指针
ceshi = cJSON_Parse (data);
if (!ceshi)
{
printf ("error:%s",cJSON_GetErrorPtr());
}
else
{
printf ("解析成功");
//3.根据键值对的名称从链表中取出对应的值,返回该键值对的地址
cJSON* jsonXingbie = cJSON_GetObjectItem (ceshi, "xingbie");
//4.根据类型提取相关值
if (jsonXingbie->type == cJSON_String)
{
printf ("%s", jsonXingbie->valuestring);
}
}
//5.释放
cJSON_Delete (ceshi);
return 0;
}
五:了解解析常用的几个函数
cJSON_Parse(const char *value);
解析json,解析不成功返回NULL。
cJSON_GetObjectItem(const cJSON * const object, const char * const string)
如果指定键存在于 JSON 对象中,就返回对应的值;如果不存在,则返回 NULL。
/* These functions check the type of an item */
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
判断cJSON的存储的类型
cJSON_Delete (ceshi);
释放
在使用 cJSON 时,记得及时释放分配的内存以避免内存泄漏。
json物联网用的蛮多的 soma 发表于 2024-5-24 12:43
json物联网用的蛮多的
碎片化时间学习 我又来了{:5_309:} soma 发表于 2024-5-24 12:43
json物联网用的蛮多的
关键是有的api8266还不能连接上 。。。。
页:
[1]
2