2014-03-04 46 views
0

我檢索我的收藏蒙哥匹配子查詢的所有文檔:瓶/ Pymongo JSON響應到Java

cursor = db.users.find({"username": {'$regex': username}}) 

,然後返回所有匹配的文檔作爲JSONArray到java客戶端:

jsonArray = [json.dumps(doc, default=json_util.default) for doc in cursor] 
return json.dumps(jsonArray) 

當我想通過JSONArray在Java端解析,我一定要做到以下幾點:

JSONArray json = new JSONArray(jsonString); 
for (int i = 0; i < json.length(); i++) { 
    String s = json.getString(i); 
    JSONObject row = new JSONObject(s); 
    ..... 

我相當有信心在這裏做錯了事。我不應該將JSONArray元素轉換爲字符串,然後轉換爲JSONObject。無論如何,我可以直接從JSONArray中檢索JSONObject,而無需先將其轉換爲字符串?

+0

可以發佈你需要的樣本json數據格式 – kartheek

回答

1

您正在返回JSON數組的字符串,而不是JSON數組對象。

getJSONObject不會解析字符串以返回對象。

你必須從你的瓶代碼返回對象的列表:

return json.dumps(list(cursor), default=json_util.default) 

之後,使用緬代碼。

+0

是 list(cursor) 與 相同[doc for doc in cursor] ? – ynnadkrap

+0

是的,它是一樣的。 – iurisilvio

1

你的意思是JSONArray.getJSONObject(int index)

JSONArray json = new JSONArray(jsonString); 
for (int i = 0; i < json.length(); i++) { 
    JSONObject row = json.getJSONObject(i); 
    ..... 
+0

是的,這是理想的我想要的,但是這對我來說是一個例外。它迫使我將其轉換爲字符串,然後轉換爲JSONObject。 – ynnadkrap

+0

你可以發佈你正在嘗試閱讀的異常和json文件嗎? – Menno

+0

Value {「username」:「danny」,「phone_number」:「.....」,「password」:「pbkdf2:sha1:1000 $ huGJOzcP $ 80b2d59676048a27a6fe2deaf29b1a6a681374a4」,「pictures」:{},「created_on」: {「$ date」:1392862827215},「_id」:{「$ oid」:「5305666bebc2e5e5cdec37b5」},「friends」:[],「email」:「.....」} 0 .String不能轉換爲JSONObject – ynnadkrap