Json 修补删除数组中的子元素
Json Patch removing sub elements in an array
我想从数组中删除子元素,例如
{
"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"}]
但是有什么方法可以指定通配符给select数组中的所有id元素
我一直在看 JSON patch draft but didn't find anything about regular expressions. One solution is to use some JSON
parse tools to create it, like jq and python-json-patch。第一个删除所有 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"}]}
我想从数组中删除子元素,例如
{
"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"}]
但是有什么方法可以指定通配符给select数组中的所有id元素
我一直在看 JSON patch draft but didn't find anything about regular expressions. One solution is to use some JSON
parse tools to create it, like jq and python-json-patch。第一个删除所有 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"}]}