1

たとえば、配列からサブ要素を削除したい

{
    "employees": [
        {
            "name": "name1",
            "id": "id1"
        },
        {
            "name": "name2",
            "id": "id2"
        },
        {
            "name": "name3",
            "id": "id3"
        }
    ]
}

そして、すべてのIDを削除するためのパッチが必要なので、このようなことができます

[{ "op": "remove", "path": "/employees/0/id"},
{ "op": "remove", "path": "/employees/1/id"},
{ "op": "remove", "path": "/employees/2/id"}]

しかし、ワイルドカードを指定して配列内のすべての id 要素を選択する方法はありますか

4

1 に答える 1

1

JSON パッチ ドラフトを見てきましたが、正規表現については何も見つかりませんでした。1 つの解決策は、 jqpython-json-patchJSONなどの解析ツールを使用して作成することです。1 つ目はすべてのキーを削除し、2 つ目は差分からパッチを作成します。次のように使用します。id

jq 'del(.employees[].id)' jsonfile | jsondiff jsonfile -

次の結果が得られます。

[{"op": "replace", "path": "/employees/2", "value": {"name": "name3"}}, 
 {"op": "replace", "path": "/employees/1", "value": {"name": "name2"}}, 
 {"op": "replace", "path": "/employees/0", "value": {"name": "name1"}}]

ツールを使用しjsonpatchてパッチを適用すると、次のような正しい出力が生成されるようです。

jq 'del(.employees[].id)' jsonfile | jsondiff jsonfile - | jsonpatch jsonfile -

次の結果が得られます。

{"employees": [{"name": "name1"}, {"name": "name2"}, {"name": "name3"}]}
于 2015-07-03T13:35:10.130 に答える