I'm using Java Driver 3.0 with MongoDB in order to send JSONs through a webservice.
When I want to convert a Document object (org.bson.Document) to JSON, I use obj.toJson()
, and when I want to convert a JSON to a Document object, I use Document.parse(json)
.
However when I'm dealing with lists of Documents (represented like this in JSON:[{"field1":1, ...}, {"field1":2, ...}]
), I can't figure out a clean way of doing these conversions.
So far, I've come up with these "hacks":
From List to JSON: I add the list of documents as a value of a field called "list" in a bigger document. I convert this big document to JSON, and remove what I don't need from the obtained String.
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); }
From JSON to List: I do the opposite by adding this "list" field to the JSON, converting it to a Document and getting only the value of this field from the Document.
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 ; }
I also tried to use another JSON serializer (I took Google's one), but it doesn't give the same result as the built-in toJson()
method from the Document object, particularly for the "_id" field or the timestamps.
Is there any clean way of doing this?