开发者

json object as get parameter

开发者 https://www.devze.com 2023-01-29 21:36 出处:网络
I\'m writing API for a mongo database. I need to pass JSON object as GET parameter: example.com/api/obj/list/1/?find={\"foo\":\"bar\"}

I'm writing API for a mongo database. I need to pass JSON object as GET parameter:

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

How should I organize this better?

I thought about using JSON-like objects without quotes and spaces, for example:

{$or:[{a:foo+bar},开发者_运维技巧{b:2}]}

So is there any tools to parse it in Python/Django?


It should be fine as long as the JSON objects aren't too big, they don't contain sensitive data (it sucks to see your password in your browser history) and you URL-escape them.

Unfortunately, you have to take shortcuts if you want to have a human-readable JSON parameter. All JSON brackets ({, }, [, ]) are recommended for escaping. You don't have to escape them, but you are taking a risk if you don't. More annoying is the :, which is ubiquitous in JSON and must be escaped.

If you want human-readable query strings, then the sensible solution is to encode all query parameters explicitly. A compromise that might work quite well is to unpack the top-level JSON object into explicit query parameters, each of remains JSON-encoded. Going a small step further, you could drop any top-level delimiters that remain, e.g.:

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"

Since you know that foo is a string, items is an array and staff is an object, you can rehydrate the JSON syntax correctly before sending the lot to a JSON parser.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号