JSON Путь для элемента иногда в массиве

Мне нужен путь JSON к «элементу», когда «условие» равно 1.

{
  "customer": [
    {
      "Addresses": {
        "addressDetails": {
          "element": "one"
        },
        "Condition": {
          "type": 1
        }
      }
    },
    {
      "Addresses": [
        {
          "addressDetails": {
            "element": "two"
          },
          "Condition": {
            "type": 0
          }
        },
        {
          "addressDetails": {
            "element": "three"
          },
          "Condition": {
            "type": 1
          }
        }
      ]
    }
  ]
}
                                      

Как вы можете видеть в примере: «Адреса» иногда могут представлять собой массив, содержащий несколько деталей. Мне нужно получить «элемент» только из тех, где «Условие» равно 1 — поэтому из этого фрагмента путь JSON должен возвращать «один» и «три». Это возможно?

Я пробовал много разных способов фильтрации с использованием [?(@.==)], но это никогда не работало - мне удалось получить элемент либо из объекта, не являющегося массивом, либо из объекта массива, но никогда из того и другого.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужен оператор рекурсивного спуска ... Это будет рекурсивно искать по дереву. Начните с этого, а потом уже можете использовать свой фильтр [?...].

$..[?(@.Condition.type == 1)]

Вы можете проверить это на моем сайте: https://json-everything.net/json-path.


Кстати, в новом RFC 9535 скобки не нужны:

$..[[email protected] == 1]

Обратите внимание: поскольку это новая спецификация, реализации все еще догоняют ее, поэтому сверьтесь с библиотекой, которую вы используете.

Другие вопросы по теме