Как использовать JsonPath для выбора объектов со свойством массива, содержащим определенное значение? - PullRequest
0 голосов
/ 03 апреля 2020

Предположим JSON ниже, описывающий список книг. Каждая книга имеет свойство characters, которое является массивом символьных объектов. Я хочу выбрать книгу на основе имени персонажа.

$..characters[?(@.name == 'Mer Cury')] возвращает блок:

{
  "name": "Mer Cury",
  "sex": "unknown"
}

Поэтому я предположил, что следующее будет работать, но это не так: $.book[?(@.characters[?(@.name == 'Mer Cury')])]. Я также пытался использовать $.book[?(@.characters.some(c => c.name === 'Mer Cury'))], но это тоже не сработало.

Есть идеи, как вернуть родительский элемент на основе свойства элемента в массиве свойств?

{
  "books": [
    {
      "title": "Best Book Ever",
      "author": "F. Ready",
      "pages": "16",
      "characters": [
        {
          "name": "Mer Cury",
          "sex": "unknown"
        },
        {
          "name": "Father B.",
          "sex": "male"
        }
      ]
    },
    {
      "title": "Are You Reading To Me?",
      "author": "Al Paca",
      "pages": "280",
      "characters": [
        {
          "name": "Joe Banana",
          "sex": "male"
        },
        {
          "name": "An Anas",
          "sex": "female"
        }
      ]
    }
  ]
}
...