#json #jsonpath #jayway
#json #jsonpath #jayway
Вопрос:
Могу ли я получить весь json с результатом, отраженным после фильтрации по строке, используя JSONPath?
- Перед JSON
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
- После JSON (я хочу этот результат)
{
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
},
"expensive": 10
}
Фильтр по строке для книги выполняется через ‘$..book[?(@.author = ~ /.*REES/i)]’
но можете ли вы сказать мне, как отразить весь JSON?
Ответ №1:
Вы не можете сделать это с помощью JSONPath; хотя вы хотите выбрать самый внешний элемент на основе свойства inner items, вы не хотите извлекать внешний элемент целиком. Это не работает.
Выбор внешнего элемента можно выполнить следующим образом
$..store[?(@.book[0].author =~ /.*REES/i)]
но это также вернет книгу в позицию 2, т.Е. Индекс 1.
Похоже, вам действительно нужно преобразование JSON, такое как Jolt.
Например, Jolt’s remove transformer позволит вам удалить вторую книгу следующим образом:
[
{
"operation": "remove",
"spec": {
"store": {
"book": {
"array": {
"1": "" //remove book at position 2
}
}
}
}
}
]
Попробуйте это онлайн с вашим собственным вводом здесь.
Комментарии:
1. Один JSONPath не может этого сделать ..! Я буду искать Jolt . Спасибо за ответ!