使用MongoDB驱动程序Java API进行BSON到JSON转换

时间:2017-02-02 20:15:00

标签: json mongodb bson

我正在使用MongoDB驱动程序Java API将BSON转换为JSON。 我有这样的测试代码。

String input = "{ \"timestamp\" : 1486064586641 }";
org.bson.Document doc = org.bson.Document.parse(input);
System.out.println("input  = " + input);
System.out.println("output = " + doc.toJson());

输出结果为:

input  = { "timestamp" : 1486064586641 }
output = { "timestamp" : { "$numberLong" : "1486064586641" } }

是否有一种简单的方法可以使输出看起来像输入?

2 个答案:

答案 0 :(得分:9)

BSON Documnet的toJson方法仅支持输出到MongoDB Extended JSON(STRICT或SHELL格式)。如果您想要常规JSON,可以使用com.mongodb.util.JSON class:

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));

这将产生以下输出:

input  = { "timestamp" : 1486064586641 }
output (SHELL) = { "timestamp" : NumberLong("1486064586641") }
output (STRICT) = { "timestamp" : { "$numberLong" : "1486064586641" } }
output (JSON) = { "timestamp" : 1486064586641}

答案 1 :(得分:0)

Natalja的回答很好,但是如果您使用的是Mongo Java驱动程序3.8.2以上版本,您会注意到一些弃用警告。如果希望输出看起来像输入,则可以使用RELAXED JsonWriterSettings模式。

下面您将看到一个示例,其中包含可能的模式以及JSON的外观。还有一些过时的警告和已过时的代码的替代方法:

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    

还请注意,JsonWriterSettings构造函数已被弃用,您可以使用另一种构建器方法,例如:

JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build()
相关问题