Генерация json в python для движка приложения - PullRequest
10 голосов
/ 03 мая 2011

Я немного новичок в python и мне интересно, как лучше всего генерировать json в цикле. Я мог бы просто смешать кучу строк в цикле, но я уверен, что есть лучший способ. Вот еще некоторые особенности. Я использую движок приложения в python для создания службы, которая возвращает json в качестве ответа.

Итак, в качестве примера, скажем, кто-то запрашивает список пользовательских записей из сервиса. После того, как служба запросит записи, она должна возвращать json для каждой найденной записи. Может быть, что-то вроде этого:

{records: 
{record: { name:bob, email:blah@blah.com, age:25 } },
{record: { name:steve, email:blah@blahblah.com, age:30 } }, 
{record: { name:jimmy, email:blah@b.com, age:31 } }, 
}

Извините, мой плохо отформатированный JSON. Спасибо за вашу помощь.

Ответы [ 3 ]

18 голосов
/ 03 мая 2011

Создание собственного JSON глупо.Вместо этого используйте json или simplejson.

>>> json.dumps(dict(foo=42))
'{"foo": 42}'
7 голосов
/ 03 мая 2011

Мой вопрос: как мне добавить словарь динамически? Так что foreach запись в моем списке записей, добавить запись в словарь.

Возможно, вы хотите создать список словарей.

records = []
record1 = {"name":"Bob", "email":"bob@email.com"}
records.append(record1)    
record2 = {"name":"Bob2", "email":"bob2@email.com"}
records.append(record2)

Затем в движке приложения используйте приведенный выше код для экспорта records как json.

4 голосов
/ 03 мая 2011

Здесь несколько шагов.

Сначала импортируйте simplejson

from django.utils import simplejson

Затем создайте функцию, которая будет возвращать json с соответствующим заголовком данных.

def write_json(self, data):
  self.response.headers['Content-Type'] = 'application/json'
  self.response.out.write(simplejson.dumps(data))

Затем извнутри вашего поста или обработчика get создайте словарь python с нужными данными и передайте их в созданную вами функцию.

 ret = {"records":{
   "record": {"name": "bob", ...}
   ...
 }
 write_json(self, ret)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...