简介
Jansson是一个用于解码、编码、操控JSON的C库。其特性为:

简单直观的API和数据模型
没有依赖项
完整的Unicode支持(UTF-8)

需要的头文件: #include <jansson.h>

格式限定符

应用举例

解码JSON
下面的代码展示了如何把字符串解码为json_t结构:
C

#include <jansson.h>
#include <assert.h>int main() {char *text = "{ \"name\":\"汪震\", \"age\":30, \"children\":[ \"彩彩\", \"当当\" ] }";json_error_t error;// json_t用于引用任何JSON节点json_t *root = json_loads( text, 0, &error );// 如果读取失败,自动置为空指针if ( !root ) {fprintf( stderr, "error: on line %d: %s\n", error.line, error.text );return 1;} else {// json_is_*宏用于判断数据类型// 处理JSON对象assert( json_is_object( root ));json_t *name, *age, *children;name = json_object_get( root, "name" );age = json_object_get( root, "age" );fprintf( stdout, "NAME: %s, AGE: %d\n", json_string_value( name ), json_integer_value( age ));children = json_object_get( root, "children" );// 处理JSON数组assert( json_is_array( children ));int sof = json_array_size( children );for ( int i = 0; i != sof; i++ ) {json_t *child = json_array_get( children, i );fprintf( stdout, "CHILDREN: %s\n", json_string_value( child ));}// 减小引用计数,导致资源回收json_decref( root );}return 0;
}

运行上述代码后输出:

NAME: 汪震, AGE: 30
CHILDREN: 彩彩
CHILDREN: 当当

编码JSON
下面的代码展示了如何把json_t结构编码为字符串:
C

json_t *root = json_pack( "{sssis[ss]}", "name", "汪震", "age", 30, "children", "彩彩", "当当" );
char *text = json_dumps( root, JSON_INDENT( 4 ) | JSON_SORT_KEYS );
fprintf( stdout, "%s\n", text );

运行上述代码后输出:

{"age": 30,"children": ["彩彩","当当"],"name": "汪震"
}

打包JSON
下面的代码展示了如何把零散数据打包(pack)为json_t结构:

assert( json_is_integer( json_pack( "i", 1 )));
assert( json_is_array(// jansson使用格式限定符来指定要创建的JSON的JSON节点的类型// 下面的例子创建三元素的数组:字符串、字符串、布尔值json_pack( "[ssb]", "foo", "bar", 1 )
));
/* 打包一个空对象 */
json_pack( "{}" );
/* 打包出 {age:30,childNum:2} */
json_pack( "{sisi}", "age", 30, "childNum", 2 );
/* 打包出 [[1, 2], {"num": true}] */
json_pack( "[[i,i],{s:b}]", 1, 2, "num", 1 );
return 0;

解包JSON
下面的代码展示了如何把json_t结构解包为零散数据:

json_t *root = json_pack( "{sssis[ss]}", "name", "汪震", "age", 30, "children", "彩彩", "当当" );
char *name;
int age;
// 可以仅仅解包一部分
json_unpack( root, "{sssi}", "name", &name, "age", &age );
fprintf( stdout, "NAME: %s, AGE:%d\n", name, age );

Refer:
Jansson API 介绍

jansson库使用相关推荐

  1. jansson库double精度控制

    jansson库可使用JSON_REAL_PRECISION()控制精度: //精度控制,保持6位数据(包含小数) char *pJson = json_dumps( root ,JSON_REAL_ ...

  2. STM32 基础系列教程 49 – Jansson

    前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...

  3. avro的c语言api,在CentOS/RHEL上编译序列化软件Avro的C语言接口库

    消息由键,值和头部组成.Kafka不识别消息中键和值,它按字节数组处理他们.但生产者和消费者关心如何读取这些数据.所以我们希望数据存储的方式是易读的,同时它还要尽可能地紧凑和快速编解码.例如,JSON ...

  4. STM32 基础系列教程 50 – MbedTls

    前言 mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码.这是双重许可与Apache许可证 2.0版(与GPLv2许可也可).网站上指出,mbed ...

  5. 用python做一个上位机串口通信_【教程】简易Python上位机之LED控制

    电子爱好者应该不会对"上位机"这个词感到陌生,毕竟或多或少有过接触.但若是说到上位机的开发的话,大家就不一定熟悉了.很多电子爱好者完全没有接触过上位机的开发工作,他们真的没有相应的 ...

  6. OneNET Studio云平台STM32物联网开发(2)- STM32+Air724UG(4G模组)数据采集显示上报

    实现效果视频 STM32 Air724UG 4G OneNET数据传输 本章教学视频(1) OneNET StudioSTM32+Air724UG -1 本章教学视频(2) OneNET Studio ...

  7. python led屏控制_【教程】简易Python上位机之LED控制

    电子爱好者应该不会对"上位机"这个词感到陌生,毕竟或多或少有过接触.但若是说到上位机的开发的话,大家就不一定熟悉了.很多电子爱好者完全没有接触过上位机的开发工作,他们真的没有相应的 ...

  8. 一文解锁华为云新技能-AIOT开发全流程【设备接入-ESP端侧数据收集[MQTT]-实时数据分析】(步步截图较详细)

    一文解锁华为云新技能-AIOT开发全流程[设备接入-ESP端侧数据收集[MQTT]-实时数据分析](步步截图较详细) 在这篇你将会接触到:从物联网工程师从硬件层-通信层到应用层全流程:开发华为云最基本 ...

  9. uwsgi配置文件详解

    目录 官方文档 安装 配置风格 命令行参数(command line args) 环境变量(environment variable) xml文件 ini文件 yaml文件 配置参数 socket p ...

最新文章

  1. Comet:基于 HTTP 长连接的“服务器推”技术解析
  2. redis布隆过滤器PHP,Redis 中的布隆过滤器
  3. Java描述设计模式(24):备忘录模式
  4. presentViewController:navigationController animated:YES completion:^(void)
  5. 链表的基本操作(单链表)
  6. 水仙花数c语言程序vb,VB编程:求水仙花数
  7. Android 实现基于RTMP视频播放
  8. 科比职业生涯数据集分析
  9. 由简入难学习3d机械制图软件顺序?Pro/Engineer 与CREO有何不同。
  10. 小鹿线前端课程怎么样
  11. 微信小程序图集短视频去水印源码教程
  12. 【windows环境 PKCS11库Demo 用于劫持PKCS11库并打印参数】
  13. 链式前向星dij堆优化
  14. 如何实现一个地图库封装,可以快速切换地图
  15. Python 图像 一样大小_#带你学Python# 表白利器:用Python发微信表情画-带你认识图片的秘密...
  16. 积分与微分电路 (转)
  17. access实验报告体会_Access实验报告
  18. 字节跳动疯狂扩张:IPO前的最后一战
  19. 马航空难2大可能结果
  20. 【AI达人创造营第二期】基于PaddleClas的新冠肺炎CT影像的分类

热门文章

  1. IREP_SOA Integration SOAP概述(概念)
  2. 歌颂Spring,我太爱它了
  3. 技术分享 LINUX卸载oracle
  4. 网易云信 7 周年丨服务超过 150 万开发者,消息量突破 20000 亿条
  5. cesium倾斜摄影
  6. 用C语言根据天数输出对应的年、月、日
  7. 漫谈函数式编程:聊聊 OCaml
  8. 手机端的网站:webapp
  9. 机器学习优化中的交叉熵及改进形式
  10. CSS字体样式调整详解