#python #json #python-3.x
Вопрос:
Цель состоит в том, чтобы записать все имена для каждого идентификатора. Вот пример файла JSON. Кроме того, не могли бы вы помочь мне перефразировать название вопроса.
"AllStudents":
{
"id": "1"
"properties":{
"Classes":[{
"name" = "math",
"Grades":[{
"value" = "80"},
"value" = "60"}]
"name"= "Chemistry",
"Grades":[{
"value" = "100"},
"value" = "15"}]
"id": "2"
"properties":{
"Classes":[{
"name" = "physics",
"Grades":[{
"value" = "50"},
"value" = "10"}]
"name"= "Computer",
"Grades":[{
"value" = "20"},
"value" = "60"}]
Текущий Код:
with open("students.json") as jsonFile:
data = json.load(jsonFile)
jsonData = data["AllStudents"]
for distro in jsonData:
printID = distro['id']
x = " ".join(name['name'] for name in distro['properties']['channels'])
for channel in distro['properties']['channels']:
y = " ".join(str(name['value']) for name in channel['Grades'])
print(PrintID, x, y)
Вывод Im получение с текущим кодом это:
1, математика, химия, 80, 60
1, математика, химия, 100, 15
2, физика, компьютер, 50, 10
2, физика, компьютер, 20, 60
Проблема с моим текущим кодом заключается в том, что он выводит только первое имя, которое является математическим. Как мне сделать так, чтобы он печатал каждое имя для каждого удостоверения личности?
Вывод, который я хочу:
1, математика, 80, 60, химия, 100, 15
2, физика, 50, 10, компьютер, 20, 60
Комментарии:
1. Как и большинство вопросов JSON о переполнении стека, это не имеет никакого отношения к JSON.
json.load
возвращает обычный Pythondict
. Однако ваш пример файла JSON недействителен; откуда взялись буквы=
s?2. @HampusLarsson Дубликаты ключей являются допустимыми JSON, хотя по умолчанию Python декодирует объект JSON в a
dict
, который удаляет дубликаты ключей. Если это проблема, то ее можно решить с помощьюobject_pairs_hook
injson.load
.3. (Я отменяю свой предыдущий комментарий об этом, не имеющий никакого отношения к JSON, пока не будет предоставлен действительный файл JSON.)
4. Привет @chepner, приношу свои извинения. Я новичок в JSON. Но разве пример, который я привел, не является файлом JSON?
5. Нет, это не так.
json.load
не удалось проанализировать то, что вы разместили здесь.
Ответ №1:
with open("students.json") as jsonFile:
data = json.load(jsonFile)
jsonData = data["AllStudents"]
for distro in jsonData:
concat = f"{distro['id']}, " ", ".join(name['name'] for name in distro['properties']['Classes'])
print(concat)
Комментарии:
1. Привет, Дэниел. Спасибо вам за помощь. Я обновил вопрос/код и надеялся, что вы поможете мне решить эту проблему, с которой я столкнулся.