Как извлечь значения из JSON файла по ключу?

Я получаю JSON файл с сервера. Mне надо с него взять определенные строки, в данном случае, вопрос и варианты ответов к нему, обработать их, и отправить боту.

Как отправить боту я понимаю, но как извлечь эти строки не понимаю, так как в начале JSON файл идет как словарь (res), потом там открывается список, а потом опять словарь. Нужны строки:

"value": "Ухаживать за животными", "value": "Обслуживать машины", "value": "Вы предпочитаете".
res = {
  "description": "Выберите наиболее предпочтительный вариант ответа из предложенных",
  "id": 16,
  "questions": [
    {
      "answers": [
        {
          "id": 187,
          "value": "Ухаживать за животными"
        },
        {
          "id": 188,
          "value": "Обслуживать машины"
        }
      ],
      "component": "SelectOneAnswer",
      "direction": "row",
      "id": 96,
      "value": "Вы предпочитаете"
    },
    {
      "answers": [
        {
          "id": 189,
          "value": "Помогать больным людям, лечить их"
        },
        {
          "id": 190,
          "value": "Составлять таблицы, схемы, программы для вычислительных машин"
        }
      ],
      "component": "SelectOneAnswer",
      "direction": "row",
      "id": 97,
      "value": "Вы предпочитаете"
    },
    {
      "answers": [
        {
          "id": 191,
          "value": "Участвовать в оформлении книг, плакатов,  журналов"
        },
        {
          "id": 192,
          "value": "Следить за состоянием и развитием растений"
        }
      ],
      "component": "SelectOneAnswer",
      "direction": "row",
      "id": 98,
      "value": "Вы предпочитаете"
    },
    {
      "answers": [
        {
          "id": 193,
          "value": "Участвовать в оформлении книг, плакатов,  журналов"
        },
        {
          "id": 194,
          "value": "Следить за состоянием и развитием растений"
        }
      ],
      "component": "SelectOneAnswer",
      "direction": "row",
      "id": 99,
      "value": "Вы предпочитаете"
    }
      }

Я могу получить только все, что храниться в questions, делая так:
a = res["questions"][0] и выводя это через print(a). Но а дальше, не знаю.


Ответы (2 шт):

Автор решения: Эникейщик
a = res["questions"][0]["answers"][0]["value"]

И т д.

→ Ссылка
Автор решения: MaxU

Для того чтобы найти все значение по ключу value вне зависимости от глубины вложенности, можно воспользоваться модулем dpath:

import dpath.util as dp   #  pip install dpath


values = dp.values(res, "/questions/**/value")

результат:

In [13]: values
Out[13]:
['Ухаживать за животными',
 'Обслуживать машины',
 'Вы предпочитаете',
 'Помогать больным людям, лечить их',
 'Составлять таблицы, схемы, программы для вычислительных машин',
 'Вы предпочитаете',
 'Участвовать в оформлении книг, плакатов,  журналов',
 'Следить за состоянием и развитием растений',
 'Вы предпочитаете',
 'Участвовать в оформлении книг, плакатов,  журналов',
 'Следить за состоянием и развитием растений',
 'Вы предпочитаете']

как правильно сделать что бы он разбивал, типа Вы предпочитаете - это вопрос, а Ухаживать за животными и Обслуживать машины это два варианта ответов, как правильно это обработать и вывести?

In [33]: dp.values(res, "questions/*/answers/**/value")
Out[33]:
['Ухаживать за животными',
 'Обслуживать машины',
 'Помогать больным людям, лечить их',
 'Составлять таблицы, схемы, программы для вычислительных машин',
 'Участвовать в оформлении книг, плакатов,  журналов',
 'Следить за состоянием и развитием растений',
 'Участвовать в оформлении книг, плакатов,  журналов',
 'Следить за состоянием и развитием растений']

In [34]: dp.values(res, "questions/*/value")
Out[34]:
['Вы предпочитаете',
 'Вы предпочитаете',
 'Вы предпочитаете',
 'Вы предпочитаете']
→ Ссылка