我有一个像{"Header" : {"name" : "TestData", "contactNumber" : 8019071740}}
如果我将此插入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);
答案 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=xxx
将Document
转换为Pojo
,您可以下一步:
Gson