Mongoose 开源库--json 使用笔记

news2024/11/25 6:50:54

一、 json相关API

mongoose 开源库可以使用json进行数据处理。

①创建json字符串

// A helper macro for printing JSON: mg_snprintf(buf, len, "%m", MG_ESC("hi"))
#define MG_ESC(str) mg_print_esc, 0, (str)
char *mg_mprintf(const char *fmt, ...);
// Print message into an allocated memory buffer. 
// Caller must free the result.

示例:

char *json = mg_mprintf("{%m:%d}", MG_ESC("name"), 123);
free(json);

json相关api,如下图;

768d2795b46d031e770ff729ab512803.png

②获取double类型数值

bool mg_json_get_num(struct mg_str json, const char *path, double *v);

③获取bool类型

bool mg_json_get_bool(struct mg_str json, const char *path, bool *v);

④获取整形数值

long mg_json_get_long(struct mg_str json, const char *path, long default_val);

⑤获取字符串类型

char *mg_json_get_str(struct mg_str json, const char *path);

详细介绍,可参考官方网址:

https://mongoose.ws/documentation/#json

二、代码测试

功能,创建json字符串,并解析,json字符串如下:

a json string: {"name":"haha","age":18,"b": [12, 2.30000],"a":1.23000}

代码如下:

#include "mongoose.h"




int main(int argc, char *argv[]) 
{
  char *buf = mg_mprintf("{%m:%m,%m:%d,%m: [%d, %f],%m:%f}", MG_ESC("name"),MG_ESC("haha"), MG_ESC("age"),18,MG_ESC("b"), 12,2.3,MG_ESC("a"),1.23);
  printf("json=%s\n",buf);


  struct mg_str json=mg_str(buf);
  char *str = mg_json_get_str(json, "$.name"); 
  printf("name=%s\n",str);
  free(str);


  long num = mg_json_get_long(json, "$.age", -1);   // num = -1   
  printf("age=%d\n",num); 


  long b0 = mg_json_get_long(json, "$.b[0]", -1) ;
  printf("b0=%d\n",b0);   


  double b1 =0.0;
  mg_json_get_num(json, "$.b[1]", &b1) ;
  printf("b1=%f\n",b1);  


  double d = 0.0;
  mg_json_get_num(json, "$.a", &d); 
  printf("d=%f\n",d); 


  free(buf);
  return 0;
}

测试结果:

4df679ab551c107b8362921a2d98e10e.png

欢迎关注公众号:嵌入式学习与实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1179602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行项目网上支付接口调用测试实例详解

前言 公司最近有一个网站商城项目要开始开发了,这几天老板和几个同事一起开着需求会议,讨论了接下来的业务规划和需求策略,等技术需求一下来还要讨论技术需求,确认后再慢慢的进入开发阶段,趁着闲暇时间想总结一下进入…

【0基础学Java第七课】-- 类和对象02

7.类和对象02 7.6 封装7.6.1 封装的概念7.6.2 访问限定符7.6.3封装扩展之包a.包的概念b. 导入包中的类c. 自定义包d 常见的包 7.7 static 成员7.7.2 静态修饰成员变量7.7.4 static修饰成员方法7.7.5 static成员变量初始化 7.8 代码块7.8.1 代码块概念以及分类7.8.2 普通代码块7…

Linux个性化登录提示信息

在Linux系统中,您可以为每个用户登录后显示个性化的提示信息。这通常通过修改用户的shell配置文件来实现,这个文件通常是用户的.bashrc或.bash_profile文件。以下是一些示例步骤,来实现这个目标: 打开终端并登录到Linux系统。 使…

AI:64-基于深度学习的口罩佩戴检测

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

“2024上海智博会”为我国智能科技产业发展注入新的动力

作为开年智能科技第一展“2024上海智博会”将于2024年三月份在国际大都市上海隆重召开,本届展会将充分展示我国智能科技产业新技术、新产品及未来发展方向。 据悉,本届展会将汇聚全球智能科技产业的领军企业和人物,共同探讨和分享最新的技术趋…

Mysql8与mariadb的安装与常用设置

一、v10服务器mariadb的安装与常用设置 V10服务器默认安装了mariadb数据库。也可使用命令sudo yum install mariadb手动安装或升级默认安装的版本。 1.1 修改数据库密码 systemctl restart mariadb,重启mariadb服务;mysql -u root -p,要求输入密码直接回车&#…

贝叶斯建模:从先验合理性到后验分布

一、说明 本文探讨贝叶斯模型,首先用摸球游戏展开模型构建步骤,然后讨论分类算法,以及实际操作方法:网格法、二次近似、蒙特卡洛。 二、针对贝叶斯的模型构建 2.1 分支剪枝和假设 在贝叶斯分析中,我们可以将这个过程想…

【C++】多文件的代码规范

算是C嘎嘎入门教程(但至少需要知道HelloWorld怎么写 内容不能说全,因为是想到哪写到哪,再次就是C是真的很杂。 (写完后博文编辑器提示我,本文章可能要20分钟读完,做好心理准备… 1、头文件(*.h)、源文件(*.cpp) 头文件…

bin.zip和bin.tar.gz以及src.zip和src.tar.gz以及rpm和dmg的区别

下载JDK时Java Downloads | Oracle会有很多文件,时间长了容易混淆,在此记录一下。 如上面三张图所示: bin代表二进制文件,是编译后的文件,而src是源码。.tar.gz是linux的压缩包,.zip是windows的压缩包 所以: bin.ta…

11.6哈夫曼树

创建哈夫曼树 经过这一步后,树的集合里就有n个叶子结点 不断从树集合里取出两个权重最小的树合并成一个新树,这时候就是两个根节点并成兄弟到一个新的根节点下,这个新的根节点的权重是两个兄弟的权重和,之后再把 每次合并的时…

32岁华为员工合同不续约,赔偿N+1,额外3个月年终奖,加班费10万+,总共25万多...

各位中生代社区的读者大大们好,我是你们的老朋友大白:) 一直以来,IT行业都有着“程序员是吃青春饭”的说法,这一年龄危机甚至逐渐演变为“45岁退休,35岁换人”的段子。 作为国内知名互联网大厂,华为近几年就曾几次三番…

Bash脚本实现Linux开机自启Redis,Nginx,MySQL等服务

一. MySQL服务自启 在CentOS 7及以上版本,MySQL以服务形式进行启动,运行两行命令即可实现。 systemctl start mysqld systemctl enable mysqld 只需运行一次即可实现MySQL开机自启动 二. 编写bash脚本 使用bash命令编写脚本实现 #!/bin/bashfunction …

linux下实现电脑开机后软件自启动

实现linux的软件自启动,需要四个文件 第一个【displayScreen.desktop】文件,.desktop文件就是一个用来运行程序的快捷方式,也叫启动器,常用来自启动用的文件,内容如下 [Desktop Entry] #要执行的脚本位置 Exec/home/yicaobao/te…

19.7 Boost Asio 传输序列化数据

序列化和反序列化是指将数据结构或对象转换为一组字节,以便在需要时可以将其存储在磁盘上或通过网络传输,并且可以在需要时重新创建原始对象或数据结构。 序列化是将内存中的对象转换为字节的过程。在序列化期间,对象的状态被编码为一组字节…

串台 fit4life | 催吐辟谷减肥药,你没看错这就是我们仨的黑历史!

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 场地支持 / 声湃轩北京录音间 运动博主/食品博士/营养师居然也都曾有程度不同的进食障碍?! 是,这没…

笔记本电脑 禁用/启用 自带键盘

现在无论办公还是生活 很多人都会选择笔记本电脑 但很多人喜欢机械键盘 或者 用一些外接键盘 但是很多时候我们想操作 会碰到笔记本原来的键盘导致错误操作 那么 我们就需要将笔记本原来的键盘禁用掉 我们先以管理员身份运行命令窗口 然后 有两个命令 禁用默认键盘 sc conf…

Apex的addError()显示的消息中实现换行

直接用‘<br/>’是无效的&#xff0c;因为addError默认不转义HTML符号&#xff0c;如果需要转义&#xff0c;应该将第二个参数escape设置为false。不过即使设置了也只对classic页面生效&#xff0c;lightning页面还是无法转义。 官方文档&#xff1a; 参考资料&#xf…

QQ邮箱批量发送

场景 已有用户邮箱,需要批量对他们发送一些广告信息。 完整代码 # coding=gbk import smtplib import csv from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipartdef send_email(msg_from, passwd, msg_to_list, text_content)

服务器数据恢复—误还原虚拟机快照后如何恢复之前的数据?

服务器数据恢复环境&#xff1a; vmfs文件系统&#xff0c;存放的是SqlServer数据库及其他办公文件。 服务器故障&#xff1a; 工作人员误操作还原快照&#xff0c;导致了SqlServer数据库数据丢失。 服务器数据恢复过程&#xff1a; 1、拿到故障服务器的所有磁盘后&#xff0c…

【Linux】拓展:运维面试题,进程管理常见的7大问题

目录 一、如何判断一个程序是单线程还是多线程 二、僵尸进程是什么&#xff0c;有什么危害&#xff0c;如何解决 三、如何找回删掉的文件 四、删除文件以后&#xff0c;空间不释放 五、遇到一个病毒&#xff08;如死循环病毒&#xff09;&#xff0c;解决思路 六、机器开机…