2010-12-09 51 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