Десериализация файла данных JSON

Я изо всех сил пытаюсь десериализовать файл входных данных в 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
            }
        }
    }
}

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

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

не похоже на действительный JSON.

khachik 15.05.2018 03:59

Добро пожаловать в stackoverflow! :) Сначала проверьте здесь свой json. json.parser.online.fr

vidstige 15.05.2018 04:00

и независимо от этого, не ясно, что вы спрашиваете, укажите ввод / желаемый результат / свой код и объясните, что не работает.

khachik 15.05.2018 04:00

Извините за это, написал что-то быстрое и не использовал правильные кавычки для JSON. Я отредактировал эту часть и обновлю желаемый результат

Tim 15.05.2018 04:05

Вы действительно установили ключи ... Десериализатор в настоящее время выдает ошибку? Или у вас проблемы с разбор? Вы пометили вопрос с помощью Python, так где же код Python?

OneCricketeer 15.05.2018 04:11

У меня проблемы с синтаксическим анализом. Я поискал, и примеры, которые я видел, показали десериализацию объекта с заданными полями. Поскольку в некоторых частях моего файла данных было несколько переменных x или y, я не мог использовать решение, опубликованное для них.

Tim 15.05.2018 04:24

Если у вас действительно возникли проблемы с синтаксическим анализом JSON, покажите нам свой код. Если это что-то более сложное, чем json.loads или json.load, проблема в том, что вы добавили дополнительной сложности, и никто не может отладить этот код, не увидев его.

abarnert 15.05.2018 19:55
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
5
7
61
2

Ответы 2

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)

Вы можете сохранить его в переменной и вызвать поверх него, чтобы увидеть 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"]

Другие вопросы по теме