Как найти все пары ключ-значение json, сопоставив значение с помощью запроса json

У меня есть ниже структура JSON:

{
    "key" : "value",
    "array" : [
        { "key" : 1 },
        { "key" : 2, "misc": {
                "a": "Apple",
                "b": "Butterfly",
                "c": "Cat",
                "d": "Dog"
            } },
        { "key" : 3 }
    ],
    "tokenize" : {
         "firstkey" : {
                      "token" : 0
                    },
         "secondkey" : {
                      "token" : 1
                    },
         "thirdkey" : {
                      "token" : 0
                    }
      }

}

Я могу пройти вышеупомянутую структуру до массива-> словарь-> б с помощью следующего синтаксиса:

$.array[?(@.key=2)].misc.b

Теперь мне нужно напечатать все токены, которые имеют значение 0. Таким же образом, как показано выше, я могу пройти до $.array[?(@. Key=2)]. Tokenize.

Как я могу запросить его, чтобы напечатать все значения, имеющие токен:0 .

Чтобы быть очень точным, я хочу, чтобы вывод был показан как:

[

      "tokenize" : {
         "firstkey" : {
                      "token" : 0
                    },
         "thirdkey" : {
                          "token" : 0
                        }
          }
]

Следующий запрос уже показывает что-то рядом с тем, что я хочу, но он не показывает ключи ("firstkey" и "thirdkey" в данном случае).

 $.tokenize[?(@.token == 0)]

Пожалуйста, помогите мне получить это тоже.

Благодарю.

1 ответ

Решение

Вы можете попробовать этот скрипт.

$.tokenize[?(@.token == 0)].token

Результат:

[
    0,
    0
]
$.tokenize[?(@.token == 0)]~

выведет

[
  "firstkey",
  "thirdkey"
]

для образца json OP используйте https://jsonpath-plus.github.io/JSONPath/demo/ для проверки ваших данных.

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