MongoDB "NumberLong/$numberLong" 转换回 Java 对象时出现问题
MongoDB "NumberLong/$numberLong" issue while converting back to Java Object
我有一个 json 有点像 {"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
我找到了 ,但我想知道如果我有非常复杂的 json 结构,那么我可能需要在这种方法中操纵许多 json 节点。
有没有人对此有更好的选择。
编辑:1
我正在阅读查询和转换 json 如下
Document MongoDocument = mycollection.find(searchCondition);
String resultJson = MongoDocument.toJson();
Gson gson = new Gson();
Model model= gson.fromJson(resultJson, ItemList.class);
Mongo db 使用 Bson 格式,其自身类型遵循 json 标准,但如果不编写自定义 wrapper/codec,它就无法被 json 库解析。
您可以使用第三方 framework/plugins 让库负责文档和 pojo 之间的转换。
如果这不适合您,您将不得不自己绘制地图。
Document mongoDocument = mycollection.find(searchCondition);
Model model= new Model();
model.setProperty(mongoDocument.get("property");
看看:converting Document objects in MongoDB 3 to POJOS
我遇到了同样的问题。使用 com.mongodb.util.JSON.serialize(document) 的解决方法可以解决问题。
val mongoJsonWriterSettings: JsonWriterSettings = JsonWriterSettings.builder.int64Converter((value, writer) => writer.writeNumber(value.toString)).build
def bsonToJson(document: Document): String = document toJson mongoJsonWriterSettings
我们可以使用下面的代码:
Document doc = documentCursor.next();
JsonWriterSettings relaxed = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
CustomeObject obj = gson.fromJson(doc.toJson(relaxed), CustomeObject.class);
Document.toJson()
给出 bson
而不是 json
.
即对于 Long
字段 myLong
等于 Document
的 xxx
它产生 json
如:
"myLong" : { "$numberLong" : "xxx"}
使用 Gson
进行解析显然不会给出 myLong=xxx
。
要使用 Gson
将 Document
转换为 Pojo
,您可以执行以下操作:
Gson gson = new Gson();
MyPojo pojo = gson.fromJson(gson.toJson(document), MyPojo.class);
我有一个 json 有点像 {"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
我找到了
有没有人对此有更好的选择。
编辑:1 我正在阅读查询和转换 json 如下
Document MongoDocument = mycollection.find(searchCondition);
String resultJson = MongoDocument.toJson();
Gson gson = new Gson();
Model model= gson.fromJson(resultJson, ItemList.class);
Mongo db 使用 Bson 格式,其自身类型遵循 json 标准,但如果不编写自定义 wrapper/codec,它就无法被 json 库解析。
您可以使用第三方 framework/plugins 让库负责文档和 pojo 之间的转换。
如果这不适合您,您将不得不自己绘制地图。
Document mongoDocument = mycollection.find(searchCondition);
Model model= new Model();
model.setProperty(mongoDocument.get("property");
看看:converting Document objects in MongoDB 3 to POJOS
我遇到了同样的问题。使用 com.mongodb.util.JSON.serialize(document) 的解决方法可以解决问题。
val mongoJsonWriterSettings: JsonWriterSettings = JsonWriterSettings.builder.int64Converter((value, writer) => writer.writeNumber(value.toString)).build
def bsonToJson(document: Document): String = document toJson mongoJsonWriterSettings
我们可以使用下面的代码:
Document doc = documentCursor.next();
JsonWriterSettings relaxed = JsonWriterSettings.builder().outputMode(JsonMode.RELAXED).build();
CustomeObject obj = gson.fromJson(doc.toJson(relaxed), CustomeObject.class);
Document.toJson()
给出 bson
而不是 json
.
即对于 Long
字段 myLong
等于 Document
的 xxx
它产生 json
如:
"myLong" : { "$numberLong" : "xxx"}
使用 Gson
进行解析显然不会给出 myLong=xxx
。
要使用 Gson
将 Document
转换为 Pojo
,您可以执行以下操作:
Gson gson = new Gson();
MyPojo pojo = gson.fromJson(gson.toJson(document), MyPojo.class);