Я пытаюсь распечатать информацию из файла json с помощью python

У меня есть этот файл .JSON, в котором указано, какая еда будет в нашей школе в течение недели. (Извините, это на шведском языке)

Вот файл JSON

{
  "feedbackAllowed": "True",
  "weeks": [
    {
      "days": [
        {
          "date": 1647820800,
          "items": [
            "Korv Stroganoff serveras med ris",
            "Vegetarisk Stroganoff med sojakorv serveras ris"
          ]
        },
        {
          "date": 1647907200,
          "items": [
            "Pasta serveras med laxsås",
            "Vegetarisk pastasås"
          ]
        },
        {
          "date": 1647993600,
          "items": [
            "Morotslasagne med keso och soltorkad tomat",
            "Kökets klimatsmarta rätt ( vegetarisk lasagne)"
          ]
        },
        {
          "date": 1648080000,
          "items": [
            "Het kycklingsoppa serveras med mjukt bröd och ost samt frukt",
            "Vegetarisk nudelsoppa serveras med mjukt bröd och ost samt frukt"
          ]
        },
        {
          "date": 1648166400,
          "items": [
            "Quorngryta med chili serveras med ris",
            "Kökets klimatsmarta rätt"
          ]
        }
      ],
      "number": 12,
      "year": 2022
    }
  ],
  "school": {
    "URLName": "XXX",
    "id": 000,
    "district": {
      "province": {
        "URLName": "XXX",
        "id": 000,
        "name": "XXX"
      },
      "URLName": "XXX",
      "id": 000,
      "name": "000"
    },
    "name": "000"
  },
  "id": 000,
  "bulletins": [
    {
      "text": "XXX"
    }
  ]
}

То, что я ищу, - это способ распечатать только «элементы» (все из них) из файла JSON. Я просмотрел много руководств, и я продолжаю получать такие ошибки, как:

TypeError: '_io.TextIOWrapper' object is not callable

и т. д.

я пытался использовать это

import json
with open('filename.json', 'r') as input:
    obj = json.load(input)
    #make it a string the item is the first one
    print(str(obj['items']))

но я получил эту ошибку:

KeyError: 'items'

Дополнительное (может быть, основное) примечание: не используйте input в качестве имени переменной, так как оно предопределено в python для получения ввода от пользователей через консоль.

Amirhossein Kiani 23.03.2022 22:21

В вашем файле JSON нет ключа с именем items. Этот ключ существует во внутренних словарях. Например weeks->days->items. Поэтому вам нужно вызвать что-то вроде:print(str(obj['weeks']['days']['items']))

Amirhossein Kiani 23.03.2022 22:22
weeks и days — это списки, их нужно проиндексировать.
Barmar 23.03.2022 22:25

Если вы хотите распечатать все элементы, вам нужно перебрать все недели и дни.

Barmar 23.03.2022 22:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
36
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вы должны перебрать все недели и дни.

for week in obj['weeks']:
    for day in week['days']:
        print(day['items'])

Таким образом, свойство items, к которому вы пытаетесь получить доступ, глубоко вложено в структуру JSON. Как правильно указал Бармар, вам нужно будет сначала войти в массив недель, а затем в массивы дней в течение каждой недели, чтобы получить доступ к объектам, имеющим свойство «элементы».

объект > недели > дни > предметы

Циклы for будут вашим лучшим другом для вывода этих свойств.

Я смог получить к ним доступ вот так. Просто перемещаясь по диктовкам и спискам

for i in range(len(obj['weeks'][0]['days'])):
    print(obj['weeks'][0]['days'][i]['items'])

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