nlib
nn::nlib::msgpack::JsonReader クラスfinal

JSONパーサーです。ストリームからJSON文字列を読み込んでパースします。 [詳解]

#include "nn/nlib/msgpack/JsonReader.h"

公開型

enum  Option {
  OPTION_DEFAULT = 0x00000000,
  OPTION_RELAXED = 0x00000001
}
 Read()に渡すことのできるオプション値が定義されています。 [詳解]
 

公開メンバ関数

InputStreamGetStream () noexcept
 Init()で設定したベースストリームを取得します。 [詳解]
 
int GetLine () const noexcept
 (エラーが発生した付近の)行番号を取得します。
 
int GetColumn () const noexcept
 (エラーが発生した付近の)桁番号を取得します。
 
bool Read (MpObject *obj, uint32_t option=0) noexcept
 JSON文字列をストリームから読み込んでパースし、obj に設定します。 [詳解]
 
基本的なメンバ関数
 JsonReader () noexcept
 デフォルトコンストラクタです。
 
 ~JsonReader () noexcept
 デストラクタです。
 
初期化と終了
bool Init (InputStream *stream, const JsonReaderSettings &settings) noexcept
 settings に従いJsonReaderを初期化します。失敗した場合はエラーを設定してfalseを返します。 [詳解]
 
bool Init (InputStream *stream) noexcept
 デフォルト設定でJsonReaderを初期化します。失敗した場合はエラーを設定してfalseを返します。 [詳解]
 
bool Close () noexcept
 JsonReaderをクローズします。 [詳解]
 
エラーチェック
errno_t GetErrorValue () const noexcept
 発生したエラーを取得します。 [詳解]
 
 operator bool () const
 エラーが発生していなければtrueを返します。
 

静的公開メンバ関数

static errno_t ReadEx (MpObject *obj, const void *jsontext, uint32_t option=0, size_t n=RSIZE_MAX) noexcept
 JSON文字列をパースしてオブジェクトを設定します。 [詳解]
 
static bool Read (MpObject *obj, const char *jsontext, uint32_t option=0) noexcept
 JSON文字列をパースしてオブジェクトを設定します。 [詳解]
 

詳解

JSONパーサーです。ストリームからJSON文字列を読み込んでパースします。

説明
文字列はRFC4627(https://www.ietf.org/rfc/rfc4627.txt)に記述されているようなJSON文字列である必要があります。
以下のような文字列は厳密にはJSONではないのでパースに失敗します。
  • 42, 数値はJSONではありません。
  • "abc", 文字列もJSONではありません。配列か連想配列のみがJSONとなります。
  • ['abc'], シングルクォートで囲まれた文字列はJSONの文字列にはなりません。ダブルクォートで囲む必要があります。
  • {abc:42}, 連想配列のキーは文字列である必要があります。

JsonReader.h38 行目に定義があります。

列挙型メンバ詳解

Read()に渡すことのできるオプション値が定義されています。

列挙値
OPTION_DEFAULT 

デフォルトの設定です。

OPTION_RELAXED 

JSONは本来配列か連想配列である必要がありますが、その規則を緩めて解釈します。 例えば数値や文字列のみ、といった厳密にはJSONでない文字列を読み込むことを可能にしたい場合に指定します。

JsonReader.h40 行目に定義があります。

関数詳解

nn::nlib::msgpack::JsonReader::Close ( )
inlinenoexcept

JsonReaderをクローズします。

戻り値
成功した場合はtrue
説明
JsonReaderをクローズして、ベースストリームをデタッチします。 この際、ベースストリームはクローズされません。
Init()メンバ関数を再び利用することでオブジェクトを再利用することができます。

JsonReader.h52 行目に定義があります。

nn::nlib::msgpack::JsonReader::GetErrorValue ( ) const
inlinenoexcept

発生したエラーを取得します。

戻り値
0エラーは発生していません。
EILSEQJSONとしては正しくない文字に遭遇した(パースエラー)。
EINVAL引数にエラーがあった。
EEXIST初期化されたJsonReaderを再度初期化しようとした。
EIOベースストリームでエラーが発生した。
EBADF未初期化のJsonReaderを利用しようとした。
E2BIG配列サイズ等が大きすぎた。
ENOMEMメモリの取得に失敗した。

JsonReader.h53 行目に定義があります。

nn::nlib::msgpack::JsonReader::GetStream ( )
inlinenoexcept

Init()で設定したベースストリームを取得します。

戻り値
ストリームへのポインタを返します。

JsonReader.h54 行目に定義があります。

nn::nlib::msgpack::JsonReader::Init ( InputStream stream,
const JsonReaderSettings settings 
)
noexcept

settings に従いJsonReaderを初期化します。失敗した場合はエラーを設定してfalseを返します。

引数
[in]stream入力ストリームへのポインタ
[in]settingsJSONパーサーの各種設定
戻り値
成功した場合はtrue
nn::nlib::msgpack::JsonReader::Init ( InputStream stream)
inlinenoexcept

デフォルト設定でJsonReaderを初期化します。失敗した場合はエラーを設定してfalseを返します。

引数
[in]stream入力ストリームへのポインタ
戻り値
成功した場合はtrue

JsonReader.h48 行目に定義があります。

nn::nlib::msgpack::JsonReader::Read ( MpObject obj,
const char *  jsontext,
uint32_t  option = 0 
)
inlinestaticnoexcept

JSON文字列をパースしてオブジェクトを設定します。

引数
[in]obj変換されたJSONが格納されるオブジェクト
[in]jsontextJSON文字列
[in]optionオプション。JsonReader::Option型の値を論理和で合成した値を与えます。
戻り値
成功ならばtrue
説明
内部でJsonReaderを構築し、メモリストリームからJSON文字列を読み込みパースします。 途中で何らかのエラーがあった場合はfalseを返します。その場合はobj は不変です。

JsonReader.h61 行目に定義があります。

nn::nlib::msgpack::JsonReader::Read ( MpObject obj,
uint32_t  option = 0 
)
noexcept

JSON文字列をストリームから読み込んでパースし、obj に設定します。

引数
[in]obj読み込んだJSONが設定されるオブジェクト
[in]optionオプション。JsonReader::Option型の値を論理和で合成した値を与えます。
戻り値
成功した場合はtrue
説明
JSON文字列はMpObjectに変換されて、obj に格納されます。 読み込み中にエラーが発生した場合、エラーを設定してfalseを返します。
nn::nlib::msgpack::JsonReader::ReadEx ( MpObject obj,
const void *  jsontext,
uint32_t  option = 0,
size_t  n = RSIZE_MAX 
)
staticnoexcept

JSON文字列をパースしてオブジェクトを設定します。

引数
[in]obj変換されたJSONが格納されるオブジェクト
[in]jsontextJSON文字列
[in]optionオプション。JsonReader::Option型の値を論理和で合成した値を与えます。
[in]njsontext のサイズ。jsontext がヌル終端していない場合は必ず指定する必要があります。
戻り値
成功ならばtrue
説明
内部でJsonReaderを構築し、メモリストリームからJSON文字列を読み込みパースします。 途中で何らかのエラーがあった場合はfalseを返します。その場合はobj は不変です。

このクラス詳解は次のファイルから抽出されました: