Bson - Wie konvertieren von JSON-List<Dokument> Liste<Dokument> für JSON?
Ich bin mit Java-Treiber 3.0 mit MongoDB, um zu senden JSONs über einen webservice.
Wenn ich will, um zu konvertieren ein Dokument-Objekt (org.bson.Dokument) zu JSON verwende ich obj.toJson()
, und wenn ich konvertieren wollen JSON, um ein Document-Objekt, verwende ich Document.parse(json)
.
Aber wenn ich den Umgang mit Listen der Dokumente (dargestellt wie diese in JSON:[{"field1":1, ...}, {"field1":2, ...}]
), habe ich nicht herausfinden können, auf eine saubere Art und Weise zu tun, diese Umbauten.
Bisher habe ich mit diesen "hacks":
- Aus der Liste zu JSON: ich füge die Liste der Dokumente, die als Wert ein Feld namens "Liste" in einem größeren Dokument. Ich rechne dieses große Dokument, JSON, und entfernen was ich nicht brauche aus den ermittelten 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); }
- Aus der JSON-Liste: ich Tue das Gegenteil, indem diese "Liste" - Feld, um die JSON-Konvertierung zu einem Dokument, und immer nur der Wert dieses Feldes aus dem Dokument.
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 ; }
Ich habe auch versucht, eine andere zu verwenden JSON serializer (ich habe Google ein), aber es nicht das gleiche Ergebnis wie die built-in toJson()
Methode aus dem Document-Objekt, besonders für die "_id" - Feld oder dem Zeitstempel.
Gibt es eine saubere Art und Weise, dies zu tun?
InformationsquelleAutor Thematrixme | 2015-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
com.mongodb.util.JSON
Paket ist "noch" nicht veraltet und nicht umgehen Listen vonDBObject
ganz gut. Sie müssen nur ein wenig umwandeln:Und es ist nichts falsch mit dem hinzufügen, dass die "Liste" zu einem anderen
DBObject
mit der Taste "Liste", die in Ihrem Ausgang. Ansonsten können Sie eintauchen in eine andere JSON-parser und-Fütterung jedes Dokument den cursor iterator.Es hängt von der Größe der Eingabe ist, aber während diese immer noch funktioniert, sieht es sicher eine Menge Reiniger im code.
haben Sie Lesen die "nicht veraltet" - Anweisung? Das bedeutet, dass es funktioniert mit dem aktuellen Treiber. Gibt es andere Möglichkeiten, mit externen Bibliotheken. Aber Nein. Es gibt keine aktualisierten "util" - Paket zu arbeiten nativ mit BSON
Document
speziell. Nur Stimmen die Typen.Ich weiß, was veraltet bedeutet, ich fürchte, das wird entfernt werden in den nächsten Versionen, wie du schon erwähnt hast mit "immer noch nicht veraltet", und ich hätte gerne eine Lösung, die nativ bedeutete für die Fahrer 3.0. Da jedoch kein solches Ding existiert noch, Ihre Antwort scheint zu Stimmen. Danke!
Ich habe nicht versucht, sein "herablassend" hier bitte, ich hoffe, Sie nehmen nicht es so, und ich verwendet, ein Begriff, den ich daher gab Sie den Kredit undrestanding. Mein Punkt ist nicht "veraltet". Sich also Gedanken darüber machen, wenn es so markiert und Ihre builds zu starten, zeigt die Warnung. Wie ich auch sagte, es gibt andere JSON-Bibliothek, wo Sie kann damit umgehen, sowie einige reiche ( aber sehr tief ) Haken in BSON-Dokuments marshalling. Ich vermute, es wird einen "besseren Weg" in zukünftigen Treiber releases. Aber für jetzt, ich sage stick mit was funktioniert und was ist "einfach". Cheers.
InformationsquelleAutor Blakes Seven
Es gibt eine Lösung für driver 3.0.
Befolgen Sie die folgenden Schritte aus:
InformationsquelleAutor Sanchit Singhania