2017/05/10

Recent entries from same category

  1. C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」
  2. SSE を使わなくても HTML エスケープはある程度速くできる。
  3. glib を使ったマイクロフレームワーク「balde」
  4. ODBC 接続なアプリケーションの開発が楽になる C++ ライブラリ nanodbc
  5. SQLite3でカジュアルにズンドコキヨシ

おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。

結構前からあった様だけど気付いて無かった。

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 が欲しいです。


blog comments powered by Disqus