Возьмите определенный объект JSON и распечатайте их

#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 возвращает обычный Python dict . Однако ваш пример файла JSON недействителен; откуда взялись буквы = s?

2. @HampusLarsson Дубликаты ключей являются допустимыми JSON, хотя по умолчанию Python декодирует объект JSON в a dict , который удаляет дубликаты ключей. Если это проблема, то ее можно решить с помощью object_pairs_hook in json.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. Привет, Дэниел. Спасибо вам за помощь. Я обновил вопрос/код и надеялся, что вы поможете мне решить эту проблему, с которой я столкнулся.