Python, похоже, читает только один элемент для массивов верхнего уровня

#python #arrays #json

#python #массивы #json

Вопрос:

У меня есть файл JSON, который я прочитал на Python. JSON (см. Ниже) содержит два элемента верхнего уровня, оба являются массивами, содержащими сложную структуру, включая другие массивы на более низких уровнях. По какой-то причине Python, похоже, считывает только один элемент из обоих массивов верхнего уровня.

Это JSON:

 {
    "deliverables": [
        {
            "name": "<uvCode>gadget1",
            "objects": [
                { "name": "handler-plate" },
                { "name": "Cone" }
            ]
        },
        {
            "name": "<uvCode>gadget2",
            "objects": [
                { "name": "handler-plate" },
                { "name": "Cone" }
            ]
        }
    ],    
    "uvCombinations": [
        {
            "name": "st01",
            "uvMapping": [
                {
                    "objectNameContains": "handler-plate",
                    "uvLayer": "UVMap1"
                },
                {
                    "objectNameContains": "Cone",
                    "uvLayer": "UVMap1"
                }
            ]
        },
        {
            "name": "st02",
            "uvMapping": [
                {
                    "objectNameContains": "handler-plate",
                    "uvLayer": "UVMap3"
                },
                {
                    "objectNameContains": "Cone",
                    "uvLayer": "UVMap2"
                }
            ]
        }
    ]
}
 

Это мой код для чтения и выгрузки файла JSON:

 with open("file.json") as configFile:
  configuration = json.load(configFile)
  logging.debug("CONFIG: %s", json.dumps(configuration, indent=4))
 

И это результат:

 CONFIG: {
    "deliverables": [
        {
            "name": "<uvCode>gadget1",
            "objects": [
                {
                    "name": "handler-plate"
                },
                {
                    "name": "Cone"
                }
            ]
        }
    ],
    "uvCombinations": [
        {
            "name": "st02",
            "uvMapping": [
                {
                    "objectNameContains": "handler-plate",
                    "uvLayer": "UVMap3"
                },
                {
                    "objectNameContains": "Cone",
                    "uvLayer": "UVMap2"
                }
            ]
        }
    ]
}
 

Второй элемент массива deliverables (с именем <uvCode>gadget2 ) и первый элемент массива uvCombination (с именем st01 ) каким-то образом отсутствуют.

Я не эксперт по Python, но я думаю, что это должно работать как шарм, и странно, что недостающие элементы даже не имеют одного и того же индекса. Становится еще интереснее, если вы заметите, что массивы вызываются objects и uvMapping читаются правильно.

Что я делаю не так?, спрашивает бедный парень

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

1. Я не могу воспроизвести это. Я подозреваю, что файл, который вы читаете, не содержит того, что вы думаете, что он делает.

2. Я не могу воспроизвести эту проблему. Учитывая ваш JSON и ваш код на Python, я получаю выходной JSON со всем нетронутым. Происходит что-то еще.

Ответ №1:

О, ребята, вы спасли мне жизнь! Поскольку двое из вас очень быстро сообщили, что вы не можете его воспроизвести, и, поскольку Джордан предположил, что, возможно, мой файл не содержит того, что я думаю, я сначала запустил ROTL, затем я взглянул на файлы и обнаружил, что имя файла не было обновлено… Я редактировал другой файл в течение нескольких часов… : D

Спасибо, ребята, правда. Если вы не говорите, что не можете его воспроизвести, я никогда этого не осознаю, поскольку я полностью забыл о другой копии файла.