将JSON对象作为GET参数
我正在为一个Mongo数据库编写API。我需要把一个JSON对象作为GET参数传递:
example.com/api/obj/list/1/?find={"foo":"bar"}
我应该怎么更好地组织这个呢?
我考虑过使用没有引号和空格的类似JSON的对象,比如:
{$or:[{a:foo+bar},{b:2}]}
那么在Python/Django中有没有工具可以解析它呢?
1 个回答
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语法。