JSON Patch (RFC-6902)を作成するためのクラスです。
[詳解]
#include "nn/nlib/msgpack/JsonPatch.h"
JSON Patch (RFC-6902)を作成するためのクラスです。
- 説明
- オブジェクトを構築して、
Add()
, Remove()
, Replace()
, Move()
, Copy()
, Test()
を用いてJSON Patchドキュメントを構築します。 それぞれのメンバ関数は、RFC-6902で定められている"add", "remove", "replace", "move", "copy", "test"演算に対応します。 JSON Patchドキュメントを構築できたら、Export()
でMpObject
として出力します。 出力されたJSON Patchドキュメントは、JsonPatch::Apply()
を用いて適用することができます。
- 参照
- https://tools.ietf.org/html/rfc6902
-
https://triple-underscore.github.io/RFC6902-ja.html
JsonPatch.h の 30 行目に定義があります。
◆ Add()
JSON Patch文書となる配列に"add"演算を追加します。
- 引数
-
[in] | path | value が設定されるJSONドキュメント内の場所を示したJSON Pointer文字列 |
[in] | value | 設定される値 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリ割り当てに失敗した場合 |
- 説明
- "add"演算は
path
が指し示すJSONドキュメント内の場所に対して以下の演算のいずれかを実行します。
-
path
が空文字列であった場合、JSONドキュメント全体をvalue
に置換する。
-
path
が配列のインデックスを指し示している場合、そこに新たにvalue
を挿入する。 配列の末尾か'-'を示している場合、value
は配列の末尾に追加される。
-
path
の末尾のキーが存在しない場合は、そこに新たにvalue
がキーで参照される値として追加される。
-
path
に対応する値が存在する場合、その値がvalue
に置換される。
JsonPatch.h の 52 行目に定義があります。
◆ Copy()
JSON Patch文書となる配列に"copy"演算を追加します。
- 引数
-
[in] | path | コピー先のJSONドキュメント内の場所を示したJSON Pointer文字列 |
[in] | from | コピー元のJSONドキュメント内の場所を示したJSON Pointer文字列 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリ割り当てに失敗した場合 |
- 説明
- "copy"演算は、
from
により指定される値を、path
を指定して"add"演算で追加する動作を行います。 この演算が実行される直前に、操作対象のJSONドキュメント内にfrom
に対応する場所が存在している必要があります。
JsonPatch.h の 63 行目に定義があります。
◆ Export()
nn::nlib::msgpack::JsonPatchBuilder::Export |
( |
MpObject * |
patch | ) |
|
|
noexcept |
JSON PatchとなるJSONドキュメントを取り出します。
- 引数
-
[in] | patch | JSON PatchとなるJSONドキュメントが格納されるMpObject |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリ割り当てに失敗した場合 |
- 説明
- 取り出したJSON Patchドキュメントは
patch
に格納されます。 patch
に格納されていたデータは削除され、JsonPatchBuilder
はコンストラクタ実行直後と同じ状態になります。 ENOMEM
は、演算を何も追加していない場合のみに返される可能性があります。
◆ Move()
JSON Patch文書となる配列に"move"演算を追加します。
- 引数
-
[in] | path | 移動先のJSONドキュメント内の場所を示したJSON Pointer文字列 |
[in] | from | 移動元のJSONドキュメント内の場所を示したJSON Pointer文字列 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリ割り当てに失敗した場合 |
- 説明
- "move"演算は、
from
を指定して"remove"演算を行って削除した値を、path
を指定して"add"演算で追加する動作を行います。 この演算が実行される直前に、操作対象のJSONドキュメント内にfrom
に対応する場所が存在している必要があります。
JsonPatch.h の 59 行目に定義があります。
◆ Remove()
nn::nlib::msgpack::JsonPatchBuilder::Remove |
( |
const nlib_utf8_t * |
path | ) |
|
|
noexcept |
JSON Patch文書となる配列に"remove"演算を追加します。
- 引数
-
[in] | path | 削除されるJSONドキュメント内の場所を示したJSON Pointer文字列 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリ割り当てに失敗した場合 |
- 説明
- "remove"演算は
path
が指し示すJSONドキュメント内の場所を削除します。 この演算が実行される直前に、操作対象のJSONドキュメント内にpath
に対応する場所が存在している必要があります。 詳細は以下の通りです。
-
path
が空文字列であった場合、JSONドキュメント全体を削除する。
-
path
が配列のインデックスを指し示している場合、指定されたインデックスより先の要素は1つずつ前へずらす。
-
それ以外の場合、
path
で指定される値と、その値を直接指し示すキーを取り除く。
◆ Test()
JSON Patch文書となる配列に"test"演算を追加します。
- 引数
-
[in] | path | 演算が実行されるJSONドキュメント内の場所を示したJSON Pointer文字列 |
[in] | value | 比較対象となる値 |
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリ割り当てに失敗した場合 |
- 説明
- "test"演算は、
path
により指定される値とvalue
を比較します。 両者がJSONとして等価である場合に"test"演算が成功します。
JsonPatch.h の 67 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: