MongoDB" NumberLong / $ numberLong"转换回Java对象时出现问题

时间:2017-03-02 12:37:47

标签: java json mongodb mongodb-query bson

我有一个像{"Header" : {"name" : "TestData", "contactNumber" : 8019071740}}

这样的json

如果我将此插入mongoDB,它将类似于

{"_id" : ObjectId("58b7e55097989619e4ddb0bb"),"Header" : {"name" : "TestData","contactNumber" : NumberLong(8019071743)}

当我读回这些数据并尝试使用Gson转换为java对象时,它抛出异常com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a long but was BEGIN_OBJECT at line 1 column 109 path $.Header.contactNumber

我找到了this,但我想知道我是否有非常复杂的json结构,然后我可能需要在这种方法中操纵许多json节点。

有没有人对此有更好的选择。

修改:1 我正在阅读查询和转换json如下

Document MongoDocument = mycollection.find(searchCondition);
String resultJson =  MongoDocument.toJson();
Gson gson = new Gson();
Model model= gson.fromJson(resultJson, ItemList.class);

5 个答案:

答案 0 :(得分:2)

Mongo db使用Bson格式,它有自己的类型,遵循json标准但是如果没有编写自定义包装器/编解码器,它就无法被json库解析。

您可以使用第三方框架/插件使库负责在文档和pojo之间进行转换。

如果这不是您的选择,您必须自己进行映射。

Document mongoDocument = mycollection.find(searchCondition);
Model model= new Model();
model.setProperty(mongoDocument.get("property");

答案 1 :(得分:2)

看看:converting Document objects in MongoDB 3 to POJOS

我遇到了同样的问题。 com.mongodb.util.JSON.serialize(document)的解决方法可以解决问题。

答案 2 :(得分:2)

我们可以使用以下代码:

nanosleep()

答案 3 :(得分:0)

val mongoJsonWriterSettings: JsonWriterSettings = JsonWriterSettings.builder.int64Converter((value, writer) => writer.writeNumber(value.toString)).build
def bsonToJson(document: Document): String = document toJson mongoJsonWriterSettings

答案 4 :(得分:0)

Document.toJson()给出bson而不是json

即对于Long字段myLong等于xxx的{​​{1}},它会产生Document,如:

json

"myLong" : { "$numberLong" : "xxx"} 解析此类显然不会给Gson

要使用myLong=xxxDocument转换为Pojo,您可以下一步:

Gson