JSONライブラリは、JSON形式で記述されたJSON文字列を処理するためのライブラリです。

 本ライブラリは、MITライセンスJansson Ver.2.14に次の変更を行い、OPH-5000iのユーザアプリケーションにリンクできるようにしたものです。

  • ログを追加しました。ログの表示に関しては、変数を参照してください。
  • load.cファイルのjson_load_file()のエラーメッセージの一部をstrerror(errno)からerrnoに変更しました。
  • hashtable_seed.cファイルのbuf_to_uint32()を未使用の為にコメントに変更しました。
  • time.hがサポートされていないため、コメントに変更しました
  • jansson_config.hとjansson_private_config.hをincludeする際の検索順番を変更しました。
  • カスタマイズ変更用のVersion管理の為にJANSSON_MODIFY_VERSIONのdefineを追加しました。
  • jansson_config.hの詳細は、提供ヘッダファイルを参照してください。
  • ライブラリ作成時に使用するjansson_private_config.hの詳細は、下記を参照してください。
jansson_private_config.h
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_GETTIMEOFDAY 1
#define HAVE_STDINT_H 1
#define INITIAL_HASHTABLE_ORDER 3

 APIは元のJanssonライブラリから変更していませんので、APIの詳細はJanssonのAPIリファレンスを参照してください。

 JSONライブラリは、次のデータ型を定義しています。

データ型説明
オブジェクトJSONオブジェクトは、キーと値のペアの辞書です。
配列JSON配列は、他のJSON値の順序付けられたコレクションです。
文字列JSON文字列は、UTF-8の文字列です。
数値JSON数値は、整数と実数の値です。
ブール値JSONブール値は、true, falseの値です。
nullJSON nullは、null値です。

 JSONライブラリの概要は次のとおりです。



JSON文字列をJSONに変換する

 json_loads関数でJSON文字列入力をデコードし、そこに含まれる配列またはオブジェクトを返します。エラーの場合はNULLを返します。この場合、エラーにはエラーに関する情報が入力されます。


JSONの内容を文字列として返す

 JSONの内容を文字列として返すにはjson_dumps関数を使用します。



JSONの内容をファイルに保存する

 JSONの内容をファイルに出力するにはjson_dump_file関数を使用します。UTF-8を出力します。

 この関数は、UTF-8以外のエンコーディングでの出力はサポートしていません。



JSON参照カウントを解放する

 値が不要になったらすぐに参照を解放するためにjson_decref関数を呼び出す必要があります。



JSONの値を設定する

 フォーマット文字列fmtに従って新しいJSON値を作成するにはjson_pack関数を使用します。

 下記、Jansson APIリファレンスからの抜粋

/* Build an empty JSON object */
json_pack("{}");

/* Build the JSON object {"foo": 42, "bar": 7} */
json_pack("{sisi}", "foo", 42, "bar", 7);

/* Like above, ':', ',' and whitespace are ignored */
json_pack("{s:i, s:i}", "foo", 42, "bar", 7);

/* Build the JSON array [[1, 2], {"cool": true}] */
json_pack("[[i,i],{s:b}]", 1, 2, "cool", 1);

/* Build a string from a non-null terminated buffer */
char buffer[4] = { 't', 'e', 's', 't' };
json_pack("s#", buffer, 4);

/* Concatenate strings together to build the JSON string "foobarbaz" */
json_pack("s++", "foo", "bar", "baz");

/* Create an empty object or array when optional members are missing */
json_pack("{s:s*,s:o*,s:O*}", "foo", NULL, "bar", NULL, "baz", NULL);
json_pack("[s*,o*,O*]", NULL, NULL, NULL);

 下記を使用すれば、フォーマットを使用せずに個別に設定することができます。

 オブジェクトにキーの値で値を設定するには、json_object_set_new関数を使用します。

 配列の最後に値を追加するには、json_array_append_new関数を使用します。



JSONの値を取得する

 フォーマット文字列fmtに従って新しいJSON値を作成するにはjson_unpack関数を使用します。

 下記、Jansson APIリファレンスからの抜粋

/* root is the JSON integer 42 */
int myint;
json_unpack(root, "i", &myint);
assert(myint == 42);

/* root is the JSON object {"foo": "bar", "quux": true} */
const char* str;
int boolean;
json_unpack(root, "{s:s, s:b}", "foo", &str, "quux", &boolean);
assert(strcmp(str, "bar") == 0 && boolean == 1);

 下記を使用すれば、フォーマットを使用せずに個別に設定することができます。

 新しいJSONオブジェクトを取得するには、json_object関数を使用します。

 すべてのキーと値のペアを反復処理し、値を取得するには、json_object_foreach_safe関数を使用します。

 オブジェクト内の要素の数を取得するには、json_object_size関数を使用します。

 新しいJSON配列を取得するには、json_array関数を使用します。

 配列のすべての要素を反復処理し値を取得するには、json_array_foreach関数を使用します。

 配列内の要素の数を取得するには、json_array_size関数を使用します。

 新しいJSON文字列を取得するには、json_string関数を使用します。

 文字列の関連する値を、null終端のUTF-8エンコード文字列を取得するには、json_string_value関数を使用します。

 新しいJSON整数を取得するには、json_integer関数を使用します。

 整数の関連する値を取得するには、json_integer_value関数を使用します。

 新しいJSON実数を取得するには、json_real関数を使用します。

 実数の関連する値を取得するには、json_real_value関数を使用します。

 JSONのtrue値を取得するには、json_true関数を使用します。

 JSONのfalse値を取得するには、json_false関数を使用します。

 JSONのnull値を取得するには、json_null関数を使用します。



JSON値のタイプを判断する

 JSON値のタイプを取得するには、json_typeof関数を使用します。

 JSONオブジェクトを判定するには、json_is_object関数を使用します。

 JSON配列を判定するには、json_is_array関数を使用します。

 JSON文字列を判定するには、json_is_string関数を使用します。

 JSON整数値を判定するには、json_is_integer関数を使用します。

 JSON実数値を判定するには、json_is_real関数を使用します。

 JSONブール値 trueを判定するには、json_is_true関数を使用します。

 JSONブール値 falseを判定するには、json_is_false関数を使用します。

 JSON nullを判定するには、json_is_null関数を使用します。



ライセンス

 Janssonは、MITライセンスになります。下記、ライセンス情報になります。

Copyright (c) 2009-2020 Petri Lehtinen <petri@digip.org>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


最終更新日:2022/01/26