找回密码
 立即注册
查看: 775|回复: 16

stc32使用cjosn记录贴

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 06:50:37 | 显示全部楼层 |阅读模式
本帖最后由 zhange 于 2024-5-25 15:41 编辑

最近学到iic了,想驱动12864屏做个天气预报,通过8266可以获取去到天气数据,但是都是json格式,听人说可以用下cjosn,现学现用。





结束了  没成功  以后成功了再来   

在visual studio里边测试的好好的  为啥移动到keil不行了  

在visual studio里运行结果


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 06:56:33 | 显示全部楼层
1.下载cjson压缩包


里边只用到了

cJSON.c
cJSON.h


截图202405240655479433.jpg


v1.7.18版本

cJSON-master.zip (449.97 KB, 下载次数: 53)

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 07:51:48 | 显示全部楼层
二:JSON语法规则
  • json对象是一个无序的"名称值"键值对的集合,以"{"开始,以"}"结束,
  • 允许嵌套使用 每个名称和值成对出现,名称和值之间使用":"分隔; 键值对之间用","分隔
  • 在这些字符前后允许存在无意义的空白符;



对于键值,可以有如下值
  • 一个新的json对象
  • 数组使用"[“和"]"表示
  • 数字直接表示,可以是整数,也可以是浮点数
  • 字符串:使用引号"表示
  • 字面值:false、nul、true中的一个(必须是小写)



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 07:58:45 | 显示全部楼层
本帖最后由 zhange 于 2024-5-24 08:28 编辑

三:基本流程
1.创建cJSON指针
2.解析整段json数据,返回cJSON指针
3.根据键值对的名称从链表中取出对应的值,返回该键值对的地址
4.根据类型提取相关值
5.释放

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 08:33:00 | 显示全部楼层
全是英文,英语差了耽误学习呀

parse
分解;解析

[例句]        the student's ability to parse a sentence
学生解析句子的能力
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 08:35:22 | 显示全部楼层
四:初次尝试


  1. #include "cJSON.h"
  2. #include "stdio.h"
  3. int main ()
  4. {
  5.         const char* data = { "{"results":0000,"xingbie":"nan"}" };
  6.         //1.创建cJSON指针
  7.         cJSON * ceshi = NULL;
  8.         //2.解析整段数据, 返回指针
  9.         
  10.         ceshi = cJSON_Parse (data);
  11.         if (!ceshi)
  12.         {
  13.                 printf ("error:%s",cJSON_GetErrorPtr());
  14.         }
  15.         else
  16.         {
  17.                 printf ("解析成功");
  18.                 //3.根据键值对的名称从链表中取出对应的值,返回该键值对的地址
  19.                 cJSON* jsonXingbie = cJSON_GetObjectItem (ceshi, "xingbie");
  20.                 //4.根据类型提取相关值
  21.                 if (jsonXingbie->type == cJSON_String)
  22.                 {
  23.                         printf ("%s", jsonXingbie->valuestring);
  24.                 }
  25.         }
  26.         //5.释放
  27.         cJSON_Delete (ceshi);
  28.         return 0;
  29. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 09:21:36 | 显示全部楼层
五:了解解析常用的几个函数



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 时,记得及时释放分配的内存以避免内存泄漏。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-5-24 12:43:36 来自手机 | 显示全部楼层
json物联网用的蛮多的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 16:45:40 | 显示全部楼层
so*** 发表于 2024-5-24 12:43
json物联网用的蛮多的

碎片化时间学习    我又来了{:5_309:}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-5-24 16:46:12 | 显示全部楼层
so*** 发表于 2024-5-24 12:43
json物联网用的蛮多的

关键是有的api8266还不能连接上    。。。。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 09:11 , Processed in 0.138400 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表