C语言的JSON库Jansson

C语言的JSON库Jansson

游戏|数码彩彩2024-03-31 7:41:25478A+A-

Jansson概述

Jansson是一个C语言库,用于编码,解码和处理JSON数据。其主要特点和设计原则是:

  • 简单直观的API和数据模型
  • 全面的文档
  • 不依赖其他库
  • 完全支持Unicode(UTF-8)
  • 广泛的测试套件

Jansson的API稳定可靠,可广泛应用于生产中。它可以在多种平台上运行,包括多种类Unix系统和windows。它适用于任何系统,包括台式机,服务器和小型嵌入式系统。Jansson是以MIT协议授权的。

编译和安装Jansson

解压源码

bunzip2 -c jansson-2.12.tar.bz2 | tar xf -
cd jansson-2.12

源代码使用GNU Autotools(autoconf,automake,libtool),因此编译和安装非常简单。

./configure
make
make check
make install

要更改目标目录(默认情况下为/usr/local),可将--prefix=dir参数用于./configure。可参阅./configure--help以获取所有可能的配置选项的列表。

make check命令运行jansson发布的测试套件。这一步并不是绝对必要的,但它可能会发现jansson在你的平台上可能存在的问题。

如果您从git存储库(或任何其他源代码管理系统)获得源代码,则不会有./configure脚本,因为它不保存在版本控制中。要创建脚本,需要引导生成系统。可通过执行如下命令。

autoreconf -fi

此命令创建./configure脚本,然后可以如上面描述的使用该脚本编译jansson。

线程安全性

Jansson作为一个库是线程安全的,并且没有可变的全局状态。Jansson的代码内没有执行锁定。 对多个线程共享的JSON值进行只读访问是安全的,但对多个线程共享的JSON值进行更改则不可行。如果多个线程共享的JSON值发生突变,则多线程程序必须执行其自身的锁定。但是,引用计数操作json_incref(), json_decref())通常是线程安全的,并且可以在线程之间共享的JSON值上执行。可以使用JANSSON_THREAD_SAFE_REFCOUNT预处理器常数检查引用计数的线程安全性 。线程安全的引用计数操作是使用编译器内置的原子函数实现的,该函数在大多数现代编译器中都可用。如果没有编译器支持(JANSSON_THREAD_SAFE_REFCOUNT 未定义),则可能很难确保引用计数的线程安全性。

API参考

所有声明都在中jansson.h,因此应用需要包含jansson.h头文件。

#include <jansson.h>

所有常量都带有前缀JSON_(描述库版本的常量除外,带有前缀JANSSON_)。其他标识符以json_开头。

库版本

Jansson版本的格式为ABC,其中A是主要版本,B是次要版本,C是微型版本。如果微版本为零,则从版本字符串中将其省略,即版本字符串仅为AB。当新版本仅修复错误且未添加新功能时,微型版本会增加。当以向后兼容的方式添加新功能时,次要版本会增加,而微型版本会设置为零。当存在向后不兼容的更改时,主版本会增加,其他版本会设置为零。以下预处理程序常量指定库的当前版本:

JANSSON_MAJOR_VERSION,JANSSON_MINOR_VERSION,JANSSON_MICRO_VERSION

以上宏分别指定主要版本,次要版本和微型版本,其值为整型。

JANSSON_VERSION

当前版本的字符串表示形式,例如"1.2.1"或 "1.3"。

JANSSON_VERSION_HEX

版本的3字节十六进制表示形式,例如 0x010201版本1.2.1和0x010300版本1.3。这在数字比较中很有用,例如:

#if JANSSON_VERSION_HEX >= 0x010300
/* Code specific to version 1.3 and above */
#endif

JANSSON_THREAD_SAFE_REFCOUNT

如果定义了此值,则Jansson中的所有只读操作和引用计数都是线程安全的。对于早于2.11或在编译器未提供内置原子函数的版本中未定义此值 。详细的API可参考https://jansson.readthedocs.io/en/2.12/apiref.html

以下代码创建一个新的JSON数组,并为其添加一个整数:

json_t *array, *integer;
array = json_array();
integer = json_integer(42);
json_array_Append(array, integer);
json_decref(integer);
点击这里复制本文地址 版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

昂扬百科 © All Rights Reserved.  渝ICP备2023000803号-3网赚杂谈