2016-10-07 110 views
4

這是我的代碼:BSON文檔到JSON在Java中

MongoDBSingleton dbSingleton = MongoDBSingleton.getInstance(); 
MongoDatabase db; 

try { 
    db = dbSingleton.getTestdb(); 
    MongoIterable<String> mg = db.listCollectionNames(); 
    MongoCursor<String> iterator=mg.iterator(); 

    while (iterator.hasNext()) { 
     MongoCollection<Document> table = db.getCollection(iterator.next()); 

     for (Document doc: table.find()) { 
      System.out.println(doc.toJson()); 
     } 
    } 

} 

這種輸出的toJson

"modified" : { "$date" : 1475789185087} 

這是我的toString輸出:

{"modified":"Fri Oct 07 02:56:25 IST 2016"} 

我想Json中的字符串日期格式,怎麼做?

+0

什麼是你的mongo版本和java驅動程序版本? – notionquest

+0

我的mongo是3.2,驅動程序是3.3 –

回答

2

不,不可能產生純JSON。請參閱link

但是,它可以產生兩種模式的JSON。

1)嚴格的模式 - 輸出 - 你已經得到

2)外殼模式

shell模式: -

JsonWriterSettings writerSettings = new JsonWriterSettings(JsonMode.SHELL, true);   
System.out.println(doc.toJson(writerSettings)); 

輸出: -

"createdOn" : ISODate("2016-07-16T16:26:51.951Z") 

MongoDB Extended JSON

+0

但如何將此「createdOn」:ISODate(「2016-07-16T16:26:51.951Z」)轉換爲Date(), –

0

不幸的是,IMO,MongoDB Java支持被破壞。

這就是說,有在蒙戈-java的驅動程序@deprecated類,您可以使用:

String json = com.mongodb.util.JSON.serialize(document); 
System.out.println("JSON serialized Document: " + json); 

我用它來產生fasterxml(傑克遜)JSON兼容從Document對象,我可以通過new ObjectMapper().readValue(json, MyObject.class)進行反序列化。

但是,我不確定他們期望您現在使用什麼JSON類已棄用。但目前它仍在項目中(截至3.4.2版本)。

我進口我POM如下:我使用的是異步驅動程序實際獲取和更新推到蒙戈

<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongodb-driver-async</artifactId> 
    <version>3.4.2</version> 
</dependency> 
<!-- Sadly, we need the mongo-java-driver solely to serialize 
    Document objects in a sane manner --> 
<dependency> 
    <groupId>org.mongodb</groupId> 
    <artifactId>mongo-java-driver</artifactId> 
    <version>3.4.2</version> 
</dependency> 

,並只非異步驅動程序使用JSON.serialize的方法。

0

從理論上講,我們應該使用toJSON()每... https://jira.mongodb.org/browse/JAVA-1770

然而,似乎是,至少向上穿過3.6,toJSON()不支持各種類型的舊JSON.serialize()方法沒有問題的處理,如由aggregate()輸出的AggregateIterable<Document>對象。

相關問題