2010-12-09 97 views
1

我在为mongo数据库编写API。我需要通过JSON对象作为GET参数:json对象作为获取参数

example.com/api/obj/list/1/?find={"foo":"bar“}

我应该如何安排这更好?

我想过使用JSON状物体不带引号和空格,例如:

{$or:[{a:foo+bar},{b:2}]} 

那么,有没有工具来分析它在Python/Django的?

+0

您也可以URL编码或Base64编码的数据(这将导致更长的字符串)。 – 2010-12-09 09:29:23

回答

3

这应该是罚款,只要JSON对象不是太大,他们不包含敏感数据(它吮吸看到您的密码在你的浏览器历史记录),你的网址,逃避它们。

不幸的是,你有,如果你想有一个人类可读的JSON参数走捷径。所有JSON括号({}[])被推荐为逃逸。你不必逃避它们,但是如果你不这样做,你就会冒险。更可气的是:,这是JSON无处不在,必须进行转义。

如果你想人类可读的查询字符串,那么明智的解决办法是显式编码所有查询参数。可能工作得很好的折衷方案是将顶级JSON对象解压缩为显式查询参数,每个参数都保留JSON编码。走出一小步进一步,你可以删除任何顶级的分隔符仍然存在,如:

JSON: {"foo":"bar", "items":[1, 2, 3], "staff":{"id":432, "first":"John", "last":"Doe"}} 
Query: foo=bar&items=1,2,3&staff="id"%3A432,"first"%3A"John","last"%3A"Doe" 

既然你知道foo是一个字符串,项目是一个数组和员工是一个对象,你可以补充水分的JSON语法在将批次发送到JSON解析器之前正确。

+0

好吧,Mongo收藏包含开放数据的报告,所以我不会存储个人信息。不过,我可以过滤一些参数。我不想传递JSON,因为它在逃脱时增加了它的大小。此外,它将很高兴通过人类可读的查询 – San4ez 2010-12-09 09:42:40