当前位置: 首页 > news >正文

Mongoose 开源库--json 使用笔记

一、 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.lryc.cn/news/221068.html

相关文章:

  • linux中复制文件如何排除一个目录
  • 时空智友企业信息管理系统任意文件读取漏洞复现
  • YOLOv8优化:block系列篇 | Neck系列篇 |可重参化EfficientRepBiPAN优化Neck
  • 零代码编程:用ChatGPT批量提取flash动画swf文件中的mp3
  • 2023数学建模国赛C题赛后总结
  • hiveSQL语法及练习题整理(mysql)
  • 【UE4】UE编辑器乱码问题
  • 2 创建svelte项目(应用程序)
  • 手机怎么打包?三个方法随心选!
  • SecureFX如何用Public key 連接sftp
  • BUUCTF 隐藏的钥匙 1
  • idea使用gradle教程 (idea gradle springboot)2024
  • 本地部署 lama-cleaner
  • 供应链云仓系统:实现采购、销售、收银、路线规划一体化,高效协同,再创商业价值!
  • 如何用devtools快速开发一个R语言包?
  • 1、Sentinel基本应用限流规则(1)
  • BitBucket 进行代码管理
  • 惊艳!拓世法宝AI智能数字人一体机解锁数字文博的全民体验
  • Redis之与SSM集成Spring注解式缓存
  • Android 安卓 Soong构建系统——Blueprint Android.bp配置文件解析
  • 【Redis】SSM整合Redis注解式缓存的使用
  • lua中的循环 while、for、repeat until三种循环方式、pairs和ipairs区别
  • Linux 进程的管道通信
  • OpenGL和Vulkan比较
  • OpenCV入门3:像素操作
  • 使用内网穿透工具,远程测试本地接口
  • uniapp小程序才到第五层就报错navigateto:fail webview count limit exceed
  • 【C++】map set
  • 正点原子嵌入式linux驱动开发——Linux Regmap驱动
  • 京东商品详情API,页面信息采集,优惠券信息获取