在Python中为应用引擎生成JSON

10 投票
3 回答
10582 浏览
提问于 2025-04-16 16:54

我对Python还不是很熟悉,想知道在循环中生成JSON的最佳方法是什么。我可以在循环中把一堆字符串拼在一起,但我相信还有更好的方法。下面是一些具体的情况。我正在使用Python的App Engine来创建一个服务,这个服务会返回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 个回答

4

这里有几个简单的步骤。

首先,导入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))

然后,在你的post或get处理函数里,创建一个Python字典,里面放入你想要的数据,然后把这个字典传递给你刚才创建的函数。

 ret = {"records":{
   "record": {"name": "bob", ...}
   ...
 }
 write_json(self, ret)
18

自己手动创建JSON格式的数据其实没必要。你可以直接使用 json 或者 simplejson 这些工具来帮你完成这个工作。

>>> json.dumps(dict(foo=42))
'{"foo": 42}'
7

我想问的是,怎么才能动态地往字典里添加内容?也就是说,对于我记录列表中的每一条记录,都要往字典里加一条记录。

你可能是想创建一个字典的列表。

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

然后在应用引擎中,使用上面的代码把 records 导出为 json 格式。

撰写回答