Я пытаюсь загрузить JSON обратно в объект. Метод «загрузки», кажется, работает без ошибок, но объект, кажется, не обладает ожидаемыми свойствами.
Как я могу осмотреть / осмотреть объект, который у меня есть (это веб-код).
results = {"Subscriber": {"firstname": "Neal", "lastname": "Walters"}}
subscriber = json.loads(results)
for item in inspect.getmembers(subscriber):
self.response.out.write("<BR>Item")
for subitem in item:
self.response.out.write("<BR> SubItem=" + subitem)
Попытка выше вернула это:
Item
SubItem=__class__
Я не думаю, что это имеет значение, но для контекста:
JSON на самом деле идет от urlfetch в Google App Engine, чтобы
веб-сервис отдыха, созданный с помощью этой утилиты:
http://code.google.com/p/appengine-rest-server.
Данные извлекаются из хранилища данных с таким определением:
class Subscriber(db.Model):
firstname = db.StringProperty()
lastname = db.StringProperty()
Спасибо,
Нил
Обновление № 1: В основном я пытаюсь десериализовать JSON обратно в объект.
В теории это было сериализовано от объекта, и теперь я хочу вернуть его обратно в объект.
Может быть, лучший вопрос, как это сделать?
Обновление № 2: я пытался абстрагировать сложную программу до нескольких строк кода, поэтому я сделал несколько ошибок в «псевдокодировании» ее для целей публикации здесь.
Вот лучший пример кода, теперь возьмите с сайта, где я могу работать на ПК.
results = '{"Subscriber": {"firstname": "Neal", "lastname": "Walters"}}'
subscriber = json.loads(results)
for key, value in subscriber.items():
print " %s: %s" %(key, value)
Вышеприведенное работает, то, что оно отображает, выглядит не более структурированным, чем сама строка JSON. Это отображает это:
Подписчик: {u'lastname ': u'Walters', u'firstname ': u'Neal'}
У меня больше опыта в Microsoft, поэтому, когда я слышу сериализацию / десериализацию, я думаю перейти от объекта к строке и от строки к объекту. Итак, если я сериализую в JSON, а затем десериализую, что я получу, словарь, список или объект? На самом деле, я получаю JSON от веб-метода REST, который от моего имени сериализует мой объект для меня.
В идеале я хочу, чтобы объект подписчика соответствовал моему классу подписчика, описанному выше, и в идеале, я не хочу писать одноразовый пользовательский код (т. Е. Код, который был бы специфичен для «подписчика»), потому что я хотел бы сделать то же самое с десятками других классов. Если мне нужно написать какой-то собственный код, мне нужно будет сделать это в общем, чтобы он работал с любым классом.
Обновление № 3: Это объясняет, почему я считаю, что это необходимый инструмент. Я пишу огромное приложение, вероятно, на Google App Engine (GAE). Мы склоняемся к архитектуре REST по нескольким причинам, но одна из них заключается в том, что наш веб-интерфейс должен получать доступ к хранилищу данных через веб-уровень REST. (Я гораздо больше привык к SOAP, поэтому переключение на REST само по себе является небольшой проблемой). Таким образом, один из классических способов получения и обновления данных - через бизнес-уровень или уровень данных. Используя упомянутую выше утилиту REST, я могу выбрать XML или JSON. Я надеюсь сделать небольшой рабочий прототип обоих, прежде чем мы разработаем огромное приложение). Тогда, предположим, у нас есть успешное приложение, и GAE удваивает его цены. Затем мы можем переписать только уровень данных, взять наш уровень пользователя Python / Django (веб-код) и запустить его на Amazon или в другом месте.
Если я собираюсь все это делать, то зачем мне все объекты словаря. Разве я не хотел бы иметь мощную классовую структуру? Одним из следующих приемов является своего рода объектно-реляционное отображение (ORM), так что мы не обязательно выставляем наши точные таблицы данных, а скорее на логическом уровне.
Мы также хотим предоставить RESTful API платным пользователям, которые могут использовать любой язык. Для них они могут использовать XML или JSON, и они не будут использовать процедуру сериализации, обсуждаемую здесь.