Преобразование словаря в JSON
У меня возникла проблема с доступом к данным в формате JSON. Вот мой код:
r = {'is_claimed': 'True', 'rating': 3.5}
r = json.dumps(r)
file.write(str(r['rating']))
Я получаю следующую ошибку:
TypeError: string indices must be integers, not str
Что я делаю не так? Как я могу правильно получить значение рейтинга из JSON?
3 ответ(ов)
Вы можете создать вложенный словарь в приведённом выше примере, объявив новый словарь внутри словаря по умолчанию.
import json
dictionary = {
'fruit': {"Grapes": "10", "color": "green"},
'vegetable': {"chilli": "4", "color": "red"},
}
result = json.dumps(dictionary, indent=3)
print(result)
В данном примере я использовал аргумент indent=3
для форматирования вывода в читаемом виде с отступами.
Нет необходимости преобразовывать значения в строку с помощью json.dumps()
. Вы можете получить их прямо из объекта словаря. Вот так:
r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed'])
file.write(str(r['rating']))
Однако, если вы хотите записывать эти значения в файл, вы можете использовать метод str()
для преобразования rating
, как вы уже делаете, но для is_claimed
это не обязательно, так как оно уже строкового типа. Таким образом, код будет выглядеть так:
r = {'is_claimed': 'True', 'rating': 3.5}
file.write(r['is_claimed']) # 'is_claimed' уже строка
file.write(str(r['rating'])) # преобразуем 'rating' в строку
Если потребуется, вы также можете использовать f-строки
или str.format()
для более читабельной записи в файл.
Определение переменной r
как словаря должно решить задачу:
>>> r: dict = {'is_claimed': 'True', 'rating': 3.5}
>>> print(r['rating'])
3.5
>>> type(r)
<class 'dict'>
Если у вас возникнут дополнительные вопросы по работе со словарями, не стесняйтесь спрашивать!
Преобразование списка словарей в DataFrame pandas
Почему использовать dict.get(key) вместо dict[key]?
Как преобразовать вложенный словарь Python в объект?
Ошибка: "'dict' объект не имеет метода 'iteritems'"
Есть ли питоний способ объединить два словаря (сложив значения для ключей, которые присутствуют в обоих)?