Json Patch удаляет вложенные элементы в массиве
Я хочу удалить вложенные элементы из массива, например
{
"employees": [
{
"name": "name1",
"id": "id1"
},
{
"name": "name2",
"id": "id2"
},
{
"name": "name3",
"id": "id3"
}
]
}
И мне нужен патч, чтобы удалить все идентификаторы, чтобы я мог сделать что-то вроде этого
[{ "op": "remove", "path": "/employees/0/id"},
{ "op": "remove", "path": "/employees/1/id"},
{ "op": "remove", "path": "/employees/2/id"}]
Но есть ли способ указать подстановочный знак для выбора всех элементов id в массиве
1 ответ
Решение
Я смотрел на проект патча JSON, но ничего не нашел о регулярных выражениях. Одним из решений является использование некоторых JSON
разбирать инструменты для его создания, такие как jq и python-json-patch. Первый удаляет все id
ключи, а второй создает патч из diff, используемый как:
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"}]}