我正在为mongo数据库编写API。我需要将JSON对象作为GET参数传递:
example.com/api/obj/list/1/?find = { “foo” 的: “酒吧”}
我应该如何更好地组织这个?
我考虑过使用没有引号和空格的类似JSON的对象,例如:
{$or:[{a:foo+bar},{b:2}]}
那么有没有工具可以在Python / Django中解析它?
答案 0 :(得分:3)
只要JSON对象不是太大,它们就不会包含敏感数据(在浏览器历史记录中看到你的密码很糟糕),你就可以对它们进行URL转义。
不幸的是,如果你想拥有一个人类可读的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是一个字符串,items是一个数组,staff是一个对象,您可以在将批次发送到JSON解析器之前正确地重新水化JSON语法。