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);