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

JSON Patch (RFC-6902)を適用するためのクラスです。 [詳解]

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

静的公開メンバ関数

static errno_t Apply (MpObject *obj, MpObject *patch, size_t *index) noexcept
 JSON Patchを適用します。失敗した場合はobjはこの関数の実行前の状態に巻き戻されます。 [詳解]
 

詳解

JSON Patch (RFC-6902)を適用するためのクラスです。

説明
JsonPatchBuilder等を用いて構築されたJSON Patchドキュメントを適用します。
参照
https://tools.ietf.org/html/rfc6902
https://triple-underscore.github.io/RFC6902-ja.html

JsonPatch.h102 行目に定義があります。

関数詳解

◆ Apply()

nn::nlib::msgpack::JsonPatch::Apply ( MpObject obj,
MpObject patch,
size_t *  index 
)
staticnoexcept

JSON Patchを適用します。失敗した場合はobjはこの関数の実行前の状態に巻き戻されます。

引数
[in]objJSON Patchを適用する対象となるJSONに対応するMpObject
[in]patchJSON Patchに対応するMpObject
[in]indexJSON NULLでない場合、JSON Patchの適用が失敗した場合に失敗した箇所を指し示すインデックスが格納される
戻り値
0成功した場合
EINVALobj, patchNULLだった、又はpatchが配列でなかったり必要なキーが指定されていない、又は"op"キーに有効な演算が指定されていない場合
ENOMEMメモリ確保に失敗した場合
EPERMtest演算に失敗した場合
ENOENTobj内に存在する必要があった場所が存在しなかった場合
EILSEQ指定されたJSON Pointerに文法的な間違いがある場合
説明
patchに記述されているJSON Patchの演算を順番に適用します。 全て成功した場合には0を返し、途中で失敗した場合にはそれ以外の値を返します。 途中で失敗した場合は、失敗した演算の箇所をindexに格納し(0が最初)、objのJSONをこの関数の実行前の状態に巻き戻します。 patchについては、この関数が成功した場合も失敗した場合も破壊されることに注意してください。
以下はJSON Patchの適用に失敗するコード例です。書き換えられたJSONドキュメントは失敗に伴い元の状態に巻き戻されます。
auto obj = ToMpObject(R"({"a": {"b" : {"c" : "foo"}}})");
// To fail at "move" command (/a/b/d not present)
auto patch = ToMpObject(R"(
[{"op":"test","path":"/a/b/c","value":"foo"},
{"op":"remove","path":"/a/b/c"},
{"op":"add","path":"/a/b/c","value":["foo","bar"]},
{"op":"replace","path":"/a/b/c","value":42},
{"op":"move","from":"/a/b/d","path":"/a/b/c"},
{"op":"copy","from":"/a/b/d","path":"/a/b/e"}])");
size_t index;
SUCCEED_IF(JsonPatch::Apply(obj.get(), patch.get(), &index) != 0);
nlib_printf("fail at index = %" PRIuS "\n", index);
ToJson(buf, *obj);
nlib_printf("%s\n", buf);
/*
Output:
fail at index = 4
{"a":{"b":{"c":"foo"}}}
*/

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