Python — перебор проблем с вложенными данными JSON

#python #json

#python #json

Вопрос:

Я изучаю Python, и у меня возникают некоторые проблемы с итерацией по файлу данных json, чтобы получить определенные ключи и значения. Я делаю это все время в PHP, но по какой-то причине нахожу это немного сложным в Python. Я попробовал несколько вещей из Stack Overflow, но чувствую, что здесь мне не хватает фундаментального. Любые предложения приветствуются.

Вот мои данные JSON, которые я загружаю из файла:

 {
  "pfcProductfeed": {
    "productfeed": {
      "models": [
        {
          "model": {
            "modelCode": "1",
            "description": "Product 1"
          }
        },
        {
          "model": {
            "modelCode": "2",
            "description": "Product 2"
          }
        },
        {
          "model": {
            "modelCode": "3",
            "description": "Product 3"
          }
        }
      ]
    }
  }
}
  

То, что я хочу сделать, это выполнить итерацию по каждой из «моделей» и отобразить код модели и описание для каждой модели в цикле. Я пробовал это:

 import json

with open('data/stack.json') as f:
    data = json.load(f)

models = data['pfcProductfeed']['productfeed']['models']
print(json.dumps(models, indent=4, sort_keys=True))

for model in models:
    #print(json.dumps(model, indent=4, sort_keys=True))
    print(model['description']) #How do I get at the keys, and their values

  

Но это сообщает об ошибке:

печать(модель [‘описание’]) #Как мне получить ключи и их значения KeyError: ‘description’

У кого-нибудь есть предложения о том, как правильно выполнить итерацию?

Большое спасибо

Джеймс

Комментарии:

1. model['model']['description']

Ответ №1:

При использовании for model in models: model является объектом массива. Значение для примера первого model будет :

 {
    "model": {
        "modelCode": "1",
        "description": "Product 1"
    }
}
  

Итак, если вы хотите распечатать ключи model , у вас будет ['model']

Если вы хотите, чтобы вы model были :

 {
        "modelCode": "1",
        "description": "Product 1"
}
  

затем вы можете использовать

 for model in models:
    description = model['model']['description']
  

Ответ №2:

Смотрите ниже

 data = {
  "pfcProductfeed": {
    "productfeed": {
      "models": [
        {
          "model": {
            "modelCode": "1",
            "description": "Product 1"
          }
        },
        {
          "model": {
            "modelCode": "2",
            "description": "Product 2"
          }
        },
        {
          "model": {
            "modelCode": "3",
            "description": "Product 3"
          }
        }
      ]
    }
  }
}

models = data['pfcProductfeed']['productfeed']['models']
for model in models:
  print(model['model']['description'])
  

вывод

 Product 1
Product 2
Product 3
  

Комментарии:

1. Спасибо. Я предположил, что для модели в models: строка означает, что я уже на правильном уровне в данных. Я считаю, что именно так это работает, когда я делаю подобное в PHP. Спасибо за вашу помощь! Я попробую!