Este dilema se puede abordar de diferentes formas, pero nosotros te compartimos la que para nosotros es la resolución más completa.
Solución:
El método toJson de BSON Documnet solo admite la salida a MongoDB Extended JSON (formato STRICT o SHELL). Si desea tener JSON regular, puede usar com.mongodb.util.JSON
clase:
String input = " "timestamp" : 1486064586641 ";
org.bson.Document doc = org.bson.Document.parse(input);
System.out.println("input = " + input);
System.out.println("output (SHELL) = " + doc.toJson(new JsonWriterSettings(JsonMode.SHELL)));
System.out.println("output (STRICT) = " + doc.toJson(new JsonWriterSettings(JsonMode.STRICT)));
System.out.println("output (JSON) = " + com.mongodb.util.JSON.serialize(doc));
Esto generará la siguiente salida:
input = "timestamp" : 1486064586641
output (SHELL) = "timestamp" : NumberLong("1486064586641")
output (STRICT) = "timestamp" : "$numberLong" : "1486064586641"
output (JSON) = "timestamp" : 1486064586641
La respuesta de Natalja es excelente, pero si está utilizando el controlador Mongo Java 3.8.2 hacia arriba, notará algunas advertencias de desaprobación. Si desea que la salida se vea como la entrada, puede usar RELAXED
Modo JsonWriterSettings.
A continuación puede ver un ejemplo con los modos posibles y cómo se verá el JSON. También hay algunas advertencias de desaprobación y alternativas al código obsoleto:
String input = " "timestamp" : 1486064586641 ";
org.bson.Document doc = org.bson.Document.parse(input);
System.out.println("input = " + input);
JsonWriterSettings shellMode = JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build();
System.out.println("output (SHELL) = " + doc.toJson(shellMode));
JsonWriterSettings strictMode = JsonWriterSettings.builder().outputMode(JsonMode.STRICT).build();
System.out.println("output (STRICT) = " + doc.toJson(strictMode)); // deprecated - use extended like below
JsonWriterSettings extendedMode = JsonWriterSettings.builder().outputMode(JsonMode.EXTENDED).build();
System.out.println("output (EXTENDED) = " + doc.toJson(extendedMode));
JsonWriterSettings relaxed = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
System.out.println("output (RELAXED) = " + doc.toJson(relaxed));
System.out.println("output (JSON) = " + com.mongodb.util.JSON.serialize(doc)); // deprecated - use relaxed like above
También tenga en cuenta que el JsonWriterSettings
constructor está en desuso y puede usar como alternativa el método de construcción como, por ejemplo:
JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build()