Десериализация файла данных JSON - PullRequest
0 голосов
/ 15 мая 2018

Я изо всех сил пытаюсь десериализовать файл входных данных в Python 2.7 и не знал, с чего начать. Я сохранил входной файл как JSON:

{
    "Group": {
        "Test": {
            "test1": {
                "x1": 100,
                "y1": 150
            },
            "test2": {
                "x1": 23,
                "y1": 56,
                "x2": 200,
                "y2": 234
            },
            "test3": {
                "x1": 123,
                "y1": 456,
                "x2": 345,
                "y2": 986,
                "x3": 234,
                "y3": 654
            },
            "test4": {
                "x1": 789,
                "y1": 987,
                "x2": 345,
                "y2": 555,
                "x3": 111,
                "y3": 222,
                "x4": 333,
                "y4": 444
            }
        }
    }
}

Я пытаюсь вырезать данные, поэтому, если требуется регистр "test1", я могу взять значения x1 и y1 и заполнить поле. Если нужны 3 пары значений x и y, мне нужно получить значения из «test3».

Я пытаюсь заполнить поля в следующей переменной в коде. Он сохраняется в виде словаря, поскольку конечным продуктом является файл JSON. Мне нужно заполнить поля ширины и высоты значениями из файла данных, перечисленных выше. Вот переменная, распечатанная с использованием json.dumps для удобства чтения:

{
    "subs": {
        "1": {
            "video_info": {
                "width": x1,
                "height": y1
            }
        },
        "2": {
            "video_info": {
                "width": x2,
                "height": y2
            }
        },
        "3": {
            "video_info": {
                "width": x3,
                "height": y3
            }
        }
    }
}

Приведенная выше переменная была собрана воедино путем извлечения данных из разных объектов (каждый словарь под "подпрограммами"), поэтому я не могу написать все это как словарь с нуля. Каждый элемент в «подпрограммах» уже имеет значение ширины и высоты, которое необходимо перезаписать.

Примеры десериализации, которые я видел, у всех были заданные ключи. Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы можете сохранить его в переменной и вызвать его, чтобы увидеть test1-4

import json
json_data = json.dumps({
    "Group": {
        "Test": {
            "test1": {
                "x1": 100,
                "y1": 150
            },
            "test2": {
                "x1": 23,
                "y1": 56,
                "x2": 200,
                "y2": 234
            },
            "test3": {
                "x1": 123,
                "y1": 456,
                "x2": 345,
                "y2": 986,
                "x3": 234,
                "y3": 654
            },
            "test4": {
                "x1": 789,
                "y1": 987,
                "x2": 345,
                "y2": 555,
                "x3": 111,
                "y3": 222,
                "x4": 333,
                "y4": 444
            }
        }
    }
})

json = json.loads(json_data)
print json["Group"]["Test"]["test4"]
0 голосов
/ 15 мая 2018
d={
    "Group": {
        "Test": {
            "test1": {
                "x1": 100,
                "y1": 150
            },
            "test2": {
                "x1": 23,
                "y1": 56,
                "x2": 200,
                "y2": 234
            },
            "test3": {
                "x1": 123,
                "y1": 456,
                "x2": 345,
                "y2": 986,
                "x3": 234,
                "y3": 654
            },
            "test4": {
                "x1": 789,
                "y1": 987,
                "x2": 345,
                "y2": 555,
                "x3": 111,
                "y3": 222,
                "x4": 333,
                "y4": 444
            }
        }
    }
}
d2={"subs": {}}
for i in range(1,4):
  s=str(i)
  d2["subs"][s]={}
  t=d2["subs"][s]['video_info']={}
  t['width']=d['Group']['Test'][f'test{i}'][f'x{s}']
  t['height']=d['Group']['Test'][f'test{i}'][f'y{s}']
print(d2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...