我正在使用Java驅動程序3.0與MongoDB爲了通過web服務發送JSONs。Bson - 如何將JSON轉換爲列表<Document>和列表<Document>轉換爲JSON?
當我想將Document對象(org.bson.Document)轉換爲JSON時,我使用obj.toJson()
,當我想將JSON轉換爲Document對象時,我使用Document.parse(json)
。
但是,當我正在處理文檔列表(在JSON中表示爲這樣的代碼:[{"field1":1, ...}, {"field1":2, ...}]
)時,我無法弄清楚這些轉換的乾淨方式。
到目前爲止,我想出了這些「黑客」:
從列表以JSON:我添加的文件清單作爲一個更大的文件中被稱爲「列表」字段的值。我將這個大文檔轉換爲JSON,並從獲得的字符串中刪除我不需要的東西。
public String toJson(List<Document> docs){ Document doc = new Document("list", docs); String json = doc.toJson(); return json.substring(json.indexOf(":")+2, json.length()-1); }
從JSON列出:我加入這個「清單」字段的JSON,將其轉換爲一個文件,只從文檔得到這個字段的值則相反。
public static List<Document> toListOfDocuments(String json){ Document doc = Document.parse("{ \"list\":"+json+"}"); Object list = doc.get("list"); if(list instanceof List<?>) { return (List<Document>) doc.get("list"); } return null ; }
我還試圖用另一種JSON序列化(我把谷歌的一個),但它不會產生相同的結果作爲內置的Document對象toJson()
方法,特別是對「 _id「字段或時間戳。
有沒有乾淨的方式做到這一點?
感謝您的回答,但我不知道是否有一個,就是爲駕駛員3.0的解決方案。 但無論如何,我不知道我可以使用BasicDB而不是DBObject,所以謝謝。我想我可以做相反的轉換從JSON到列表? –
Thematrixme
@Thematrixme你讀過「不被棄用」的聲明嗎?這意味着它適用於當前的驅動程序。外部庫還有其他方法。但不是。沒有更新的「util」包可以與BSON'Document'本身一起工作。只需投射類型。 –
我知道棄用的意味着什麼,我只是擔心這會在下一個版本中被刪除,就像您提到的「仍然不被棄用」一樣,而且我會喜歡本機意味着用於驅動程序3.0的解決方案。然而,由於目前還沒有這樣的事情,你的答案似乎是正確的。謝謝! – Thematrixme