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

JSON又はmsgpackをプル形式でパースするためのクラスです。 [詳解]

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

クラス

struct  Detail
 エラーが発生した場合、pathにエラーが発生した箇所を示す文字列が格納されます。 [詳解]
 
struct  Token
 パーサーが取得したトークンに関するデータが格納されています。 [詳解]
 

公開型

enum  Event {
  kNone = -1,
  kEventNull = 1,
  kEventTrue,
  kEventFalse,
  kEventString,
  kEventNumberInt32,
  kEventNumberUint32,
  kEventNumberInt64,
  kEventNumberUint64,
  kEventNumberFloat,
  kEventNumberDouble,
  kEventStartArray,
  kEventEndArray,
  kEventStartMap,
  kEventEndMap,
  kEventKeyName,
  kEventBinary,
  kEventExt,
  kEventEndDocument
}
 JsonStreamParser::Next()及びTokenで利用される型で、パーサーが読み込んだデータに対応するイベントです。 [詳解]
 

公開メンバ関数

bool HasNext () const noexcept
 次に遷移する状態がある(読み込んでいるJSON又はmsgpackが終了していない)場合はtrueを返します。
 
Event Next () noexcept
 JSON又はmsgpackを読み込みパーサー内の状態を遷移します。 [詳解]
 
bool Skip () noexcept
 値、配列全体、連想配列全体を1つ読み飛ばします。 [詳解]
 
int GetLine () const noexcept
 JSONを読み込んでいる場合は現在の行数を返します。
 
int GetColumn () const noexcept
 JSONを読み込んでいる場合は現在の桁数を返します。
 
const TokenGetToken () const noexcept
 トークンを取得します。 [詳解]
 
基本的なメンバ関数
constexpr JsonStreamParser () noexcept
 デフォルトコンストラクタです。
 
 ~JsonStreamParser () noexcept
 デストラクタです。
 
初期化と終了
errno_t Init (const JsonStreamParserSettings &settings) noexcept
 パーサーの初期化を行います。 [詳解]
 
errno_t Init () noexcept
 デフォルト設定でパーサーの初期化を行います。
 
errno_t Open (InputStream *stream) noexcept
 ストリームを指定してパースを開始します。 [詳解]
 
errno_t Open (TextReader *reader) noexcept
 TextReaderオブジェクトを指定Tしてパースを開始します。 [詳解]
 
errno_t Close () noexcept
 パーサーをクローズして初期化直後の状態に設定します。 [詳解]
 
エラーチェック
Error GetError () const noexcept
 エラーを取得します。 [詳解]
 
 operator bool () const
 エラーが発生していなければtrueを返します。
 

静的公開メンバ関数

static errno_t Parse (JsonStreamParser *parser, UniquePtr< MpObject > &obj, bool peek, Detail *detail) noexcept
 JSON又はmsgpackをパースして、MpObjectを作成します。 [詳解]
 
static errno_t Parse (JsonStreamParser *parser, UniquePtr< MpObject > &obj, bool peek) noexcept
 Parse(parser, obj, peek, NULL)を実行します。
 
static errno_t Parse (JsonStreamParser *parser, UniquePtr< MpObject > &obj) noexcept
 Parse(parser, obj, false)を実行します。
 
static errno_t Parse (UniquePtr< MpObject > &obj, const void *data, size_t n, const JsonStreamParserSettings &settings, Detail *detail) noexcept
 JSON又はmsgpackをパースして、MpObjectを作成します。 [詳解]
 
static errno_t Parse (UniquePtr< MpObject > &obj, const void *data, size_t n, const JsonStreamParserSettings &settings) noexcept
 Parse(obj, data, n, settings, NULL)を実行します。
 
static errno_t Parse (UniquePtr< MpObject > &obj, const void *data, size_t n) noexcept
 JsonStreamParserSettingsのデフォルト設定でParse(obj, data, n, settings)を実行します。
 
static errno_t Parse (UniquePtr< MpObject > &obj, const nlib_utf8_t *str, const JsonStreamParserSettings &settings, Detail *detail) noexcept
 JSONをパースして、MpObjectを作成します。 [詳解]
 
static errno_t Parse (UniquePtr< MpObject > &obj, const nlib_utf8_t *str, const JsonStreamParserSettings &settings) noexcept
 Parse(obj, str, settings, NULL)を実行します。
 
static errno_t Parse (UniquePtr< MpObject > &obj, const nlib_utf8_t *str) noexcept
 JsonStreamParserSettingsのデフォルト設定でParse(obj, str, settingsを実行します。
 
パースされた数値変換

数値型のトークンを指定した型へ変換します。

static errno_t ToInt32 (const Token &token, int32_t *number) noexcept
 数値トークンをint32_tへキャストします。 [詳解]
 
static errno_t ToUint32 (const Token &token, uint32_t *number) noexcept
 数値トークンをuint32_tへキャストします。 [詳解]
 
static errno_t ToInt64 (const Token &token, int64_t *number) noexcept
 数値トークンをint64_tへキャストします。 [詳解]
 
static errno_t ToUint64 (const Token &token, uint64_t *number) noexcept
 数値トークンをuint64_tへキャストします。 [詳解]
 
static errno_t ToFloat (const Token &token, float *number) noexcept
 数値トークンをfloatへキャストします。 [詳解]
 
static errno_t ToDouble (const Token &token, double *number) noexcept
 数値トークンをdoubleへキャストします。 [詳解]
 
static errno_t ToTimestamp (const Token &token, nlib_time *t) noexcept
 タイムスタンプをnlib_timeへ変換します。 [詳解]
 

詳解

JSON又はmsgpackをプル形式でパースするためのクラスです。

説明
構文要素ごとにイベントを発生させ、それをユーザー側が処理することでパースを進めていきます。 パース処理は以下のようなコードによって発生したイベントを取得することで進められます。
JsonStreamParser::Token token;
if (nlib_is_error(parser.Init())) { ERROR }
if (nlib_is_error(parser.Open(stream))) { ERROR }
while (parser.HasNext()) {
JsonStreamParser::Event ev = parser.Next();
switch (ev) {
......
......
......
......
token = parser.GetToken();
......
.....
}
}
if (nlib_is_error(parser)) { ERROR }

JsonStreamParser.h55 行目に定義があります。

列挙型メンバ詳解

◆ Event

JsonStreamParser::Next()及びTokenで利用される型で、パーサーが読み込んだデータに対応するイベントです。

列挙値
kNone 

何らかのエラーが発生しています。

kEventNull 

nullを読み込みました。

kEventTrue 

trueを読み込みました。

kEventFalse 

falseを読み込みました。

kEventString 

連想配列のキー以外の文字列を読み込みました。

kEventNumberInt32 

int32_t型の整数を読み込みました。

kEventNumberUint32 

uint32_t型の整数を読み込みました。

kEventNumberInt64 

int64_t型の整数を読み込みました。

kEventNumberUint64 

uint64_t型の整数を読み込みました。

kEventNumberFloat 

float型の浮動小数点数を読み込みました。

kEventNumberDouble 

double型の浮動小数点数を読み込みました。

kEventStartArray 

配列が開始しました。

kEventEndArray 

配列が終了しました。

kEventStartMap 

連想配列が開始しました。

kEventEndMap 

連想配列が終了しました。

kEventKeyName 

連想配列のキーを読み込みました。

kEventBinary 

バイナリデータを読み込みました(msgpackのみ)。

kEventExt 

拡張データを読み込みました(msgpackのみ)。

kEventEndDocument 

JSON又はmsgpackが終了しました(HasNext()falseを返した場合のNext()の戻り値)。

JsonStreamParser.h57 行目に定義があります。

関数詳解

◆ Close()

nn::nlib::msgpack::JsonStreamParser::Close ( )
noexcept

パーサーをクローズして初期化直後の状態に設定します。

戻り値
0成功した場合
説明
Open()で指定したストリームやTextReaderオブジェクトは、クローズされずこのクラスから切り離されます。

◆ GetError()

nn::nlib::msgpack::JsonStreamParser::GetError ( ) const
noexcept

エラーを取得します。

戻り値
JsonStreamParserが定義するエラー値
説明
以下の値のどれかを返します。
説明
kOk エラーは発生していません
kErrorColon ':'が見つかりませんでした
kErrorComma ','が見つかりませんでした
kErrorQuote '"'が見つかりませんでした
kErrorKeyTooLong 連想配列のキーが長すぎてトークンを格納するバッファに収まりませんでした
kErrorNumberTooLong 数値文字列が長すぎてトークンを格納するバッファに収まりませんでした
kErrorArrayTooBig 配列の大きさが指定された制限をオーバーしました
kErrorMapTooBig 連想配列の大きさが指定された制限をオーバーしました
kErrorCharacter 文字列にUTF-8でない文字が含まれています
kErrorNumberRange 数値が大きすぎるか小さすぎます
kErrorDepth 配列及び連想配列の深さが指定された制限をオーバーしました
kErrorToken その他読み込んだ文字列でエラーが発生しました
kErrorStream ストリームでエラーが発生しました

◆ GetToken()

nn::nlib::msgpack::JsonStreamParser::GetToken ( ) const
inlinenoexcept

トークンを取得します。

戻り値
直前のNext()で取得したトークン

JsonStreamParser.h337 行目に定義があります。

◆ Init()

nn::nlib::msgpack::JsonStreamParser::Init ( const JsonStreamParserSettings settings)
noexcept

パーサーの初期化を行います。

引数
[in]settings動作オプション
戻り値
0成功した場合
ENOMEMメモリの確保に失敗した場合
EALREADY既に初期化済みの場合

◆ Next()

nn::nlib::msgpack::JsonStreamParser::Next ( )
noexcept

JSON又はmsgpackを読み込みパーサー内の状態を遷移します。

戻り値
読み込んだデータに対応するイベント
説明

◆ Open() [1/2]

nn::nlib::msgpack::JsonStreamParser::Open ( InputStream stream)
noexcept

ストリームを指定してパースを開始します。

引数
[in]streamJSON又はmsgpackを読み込むストリーム
戻り値
0成功した場合
EINVALstreamNULL、又はJsonStreamParserが未初期化な場合
ENONEMメモリの確保に失敗した場合
EALREADY既にオープンされている場合

◆ Open() [2/2]

nn::nlib::msgpack::JsonStreamParser::Open ( TextReader reader)
noexcept

TextReaderオブジェクトを指定Tしてパースを開始します。

引数
[in]readerJSONを読み込むTextReaderオブジェクト
戻り値
0成功した場合
EINVALreaderNULLであったり未初期化な場合、又はJsonStreamParserが未初期化な場合
EALREADY既にオープンされている場合
非推奨:
この関数は将来のリリースで削除されます。InputStreamを利用してopenするようにしてください。

◆ Parse() [1/3]

nn::nlib::msgpack::JsonStreamParser::Parse ( JsonStreamParser parser,
UniquePtr< MpObject > &  obj,
bool  peek,
Detail detail 
)
staticnoexcept

JSON又はmsgpackをパースして、MpObjectを作成します。

引数
[in]parserパーサー
[out]objパース結果が格納されるMpObject
[in]peektrueならば、最初のトークンに既にNext()で取得済みのトークンを利用
[out]detailNULLでない場合、エラーが発生した箇所を示す文字列が格納されます。
戻り値
0ならば成功

◆ Parse() [2/3]

nn::nlib::msgpack::JsonStreamParser::Parse ( UniquePtr< MpObject > &  obj,
const void *  data,
size_t  n,
const JsonStreamParserSettings settings,
Detail detail 
)
staticnoexcept

JSON又はmsgpackをパースして、MpObjectを作成します。

引数
[out]objパース結果が格納されるMpObject
[in]dataJSON又はmsgpackが格納されたデータ列
[in]nデータ列のサイズ
[in]settingsパーサーの設定パラーメータ
[out]detailNULLでない場合、エラーが発生した箇所を示す文字列が格納されます。
戻り値
0ならば成功

◆ Parse() [3/3]

nn::nlib::msgpack::JsonStreamParser::Parse ( UniquePtr< MpObject > &  obj,
const nlib_utf8_t str,
const JsonStreamParserSettings settings,
Detail detail 
)
inlinestaticnoexcept

JSONをパースして、MpObjectを作成します。

引数
[out]objパース結果が格納されるMpObject
[in]strJSONが格納された文字列
[in]settingsパーサーの設定パラーメータ
[out]detailNULLでない場合、エラーが発生した箇所を示す文字列が格納されます。
戻り値
0ならば成功
説明
この関数を用いてmsgpackをパースすることはできません。 settings.formatには、JsonStreamParserSettings::kFormatJsonが指定されているものとして動作します。

JsonStreamParser.h165 行目に定義があります。

◆ Skip()

nn::nlib::msgpack::JsonStreamParser::Skip ( )
noexcept

値、配列全体、連想配列全体を1つ読み飛ばします。

戻り値
途中でエラーが発生した場合はfalseを返します。

◆ ToDouble()

nn::nlib::msgpack::JsonStreamParser::ToDouble ( const Token token,
double *  number 
)
inlinestaticnoexcept

数値トークンをdoubleへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
EDOMトークンの値が整数値で、9007199254740991LLより大きいか-9007199254740991LLより小さかった場合

JsonStreamParser.h536 行目に定義があります。

◆ ToFloat()

nn::nlib::msgpack::JsonStreamParser::ToFloat ( const Token token,
float *  number 
)
inlinestaticnoexcept

数値トークンをfloatへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がFLT_MAXより大きいかFLT_MINよりより小さかった場合
EDOMトークンの値が整数値で、1677215より大きいか-1677215より小さかった場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h497 行目に定義があります。

◆ ToInt32()

nn::nlib::msgpack::JsonStreamParser::ToInt32 ( const Token token,
int32_t *  number 
)
inlinestaticnoexcept

数値トークンをint32_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がINT32_MAX又はINT32_MINより小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h354 行目に定義があります。

◆ ToInt64()

nn::nlib::msgpack::JsonStreamParser::ToInt64 ( const Token token,
int64_t *  number 
)
inlinestaticnoexcept

数値トークンをint64_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がINT64_MAX又はINT64_MINより小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h428 行目に定義があります。

◆ ToTimestamp()

nn::nlib::msgpack::JsonStreamParser::ToTimestamp ( const Token token,
nlib_time t 
)
staticnoexcept

タイムスタンプをnlib_timeへ変換します。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]t変換先の時刻へのポインタ
戻り値
0成功した場合
EINVALtNULLであるか、タイムスタンプ以外を変換しようとした場合
ERANGE時刻がnlib_timeに格納できる範囲ではない場合

◆ ToUint32()

nn::nlib::msgpack::JsonStreamParser::ToUint32 ( const Token token,
uint32_t *  number 
)
inlinestaticnoexcept

数値トークンをuint32_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がUINT32_MAXより大きいか0より小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h391 行目に定義があります。

◆ ToUint64()

nn::nlib::msgpack::JsonStreamParser::ToUint64 ( const Token token,
uint64_t *  number 
)
inlinestaticnoexcept

数値トークンをuint64_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がUINT64_MAXより大きいか0より小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h462 行目に定義があります。


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