おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。
- 最速と言われる JSON パーサ「rapidjson」が本当に爆速なのか試してみた。
- C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。
- 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。
- C言語から使えるJSONパーサ、JSMNを試してみた。
- 何も見ずにC++でjsonパーサが書けるか試してみた。
- ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!
- C言語から使えるJSONパーサ、jansson がとても直感的で良い
- Big Sky :: C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」
結構前からあった様だけど気付いて無かった。
GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C
README.md cJSON Ultralightweight JSON parser in ANSI C. Table of contents License Usage Welcome to c...
https://github.com/DaveGamble/cJSON
特徴は以下の通り。
- 分かりやすい API
- MIT ライセンス
- スレッドセーフ
- ANSI C (もしくは C89, C90) で書かれている
Not C++ で使える JSON パーサとしては分かりやすい API で良いと思います。参照カウンタを持っているのでメモリの解放もルートオブジェクトの破棄だけで行えます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"
int
main(int argc, char* argv[]) {
cJSON *root = cJSON_CreateObject(), *arr, *item;
cJSON_AddNumberToObject(root, "count", 1);
cJSON_AddItemToObject(root, "items", arr = cJSON_CreateArray());
cJSON_AddItemToArray(arr, cJSON_CreateString("こんにちわ世界"));
cJSON_AddItemToArray(arr, cJSON_CreateFalse());
cJSON_AddItemToArray(arr, cJSON_CreateNull());
puts(cJSON_PrintUnformatted(root));
cJSON_free(root);
root = cJSON_Parse("{\"count\":1, \"items\":[\"こんにちわ世界\",false,null]}");
arr = cJSON_GetObjectItem(root, "items");
cJSON_ReplaceItemInArray(arr, 0, cJSON_CreateString("こんにちわ日本"));
cJSON_ArrayForEach(item, arr) {
puts(cJSON_Print(item));
}
cJSON_free(root);
return 0;
}
欲を言うとシリアライズ時にメモリを確保しない API が欲しいです。