Java 使用ObjectId函数反序列化JSON以映射<;字符串,对象>;
我想将json字符串解析为Java 使用ObjectId函数反序列化JSON以映射<;字符串,对象>;,java,json,jackson,Java,Json,Jackson,我想将json字符串解析为Map 我的代码是: import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; ....... ObjectMapper mapper = new ObjectMapper(); try { TypeReference ref = new TypeRefe
Map
我的代码是:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
.......
ObjectMapper mapper = new ObjectMapper();
try {
TypeReference ref = new TypeReference<Map<String, Object>>() { };
this.map = mapper.readValue(jsonString, ref);
} catch (IOException e) {
LOG.error("cannot create Map from json", e);
}
但结果是:
cannot create Map from json
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'ObjectId': was expecting ('true', 'false' or 'null')
at [Source: {
"_id" : ObjectId("598ac67fcbaa23254498df87"),
我有许多带有ObjectId的json字符串。我不想更改文本
我不知道所有字段的名称,所以我需要地图。我无法使用POJO对象
如何使用ObjectId函数将json解析为
Map
?此错误是由于_id值不符合json标准而导致的(请参阅)。JSON值只能是:数字、字符串、数组、对象(以“{”开头,以“}”结尾)、“真”、“假”或“空”。有关更多信息,请参见JSON.org。您的JSON似乎是一个BSON()
编辑:
一个相当老套的解决方案,但可能只是替换BSON中对JSON无效的部分,对您有效吗
String jsonString = "{
\"_id\" : ObjectId(\"595cc3e6cbaa230d3c764649\"),
\"type\" : \"msg\",
\"quantity\" : 472,
\"price\" : 15.04
}";
jsonString.replace("ObjectId(","").replace(")","")
当然,您必须替换所有无效条目。导致此错误的原因是_id值不符合JSON标准(请参阅)。JSON值只能是:数字、字符串、数组、对象(以“{”开头,以“}”结尾)、“真”、“假”或“空”。有关更多信息,请参见JSON.org。您的JSON似乎是一个BSON() 编辑: 一个相当老套的解决方案,但可能只是替换BSON中对JSON无效的部分,对您有效吗
String jsonString = "{
\"_id\" : ObjectId(\"595cc3e6cbaa230d3c764649\"),
\"type\" : \"msg\",
\"quantity\" : 472,
\"price\" : 15.04
}";
jsonString.replace("ObjectId(","").replace(")","")
当然,您必须替换所有无效条目。之所以如此,是因为您的
JSON
根据
不是有效的JSON
Error: Parse error on line 2:
{ "_id": ObjectId("595cc3e6cb
-----------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'
验证您的
JSON
发件人。之所以如此,是因为您的JSON
根据
不是有效的JSON
Error: Parse error on line 2:
{ "_id": ObjectId("595cc3e6cb
-----------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'
从验证您的
JSON
。我找到了解决方案。我使用org.bson.Document
import org.bson.Document;
.........
Document doc = Document.parse(jsonString);
return new HashMap<>(doc);
导入org.bson.Document;
.........
Document doc=Document.parse(jsonString);
返回新的HashMap(doc);
最后一个问题:为什么jackson不能解析为bson文档?我找到了解决方案。我使用org.bson.Document
import org.bson.Document;
.........
Document doc = Document.parse(jsonString);
return new HashMap<>(doc);
导入org.bson.Document;
.........
Document doc=Document.parse(jsonString);
返回新的HashMap(doc);
最后一个问题:为什么jackson不能解析为bson文档?您可以做的是从json中删除{“\u id”:ObjectId(“595cc3e6cbaa230d3c764649”)},如果它不重要,请执行您正在做的操作
Document doc = (Document) DataDao.findOne("Id");
doc.remove("_id");
final JsonWriterSettings settings = JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build();
String json = doc.toJson(settings);
XyzData xyzData = jsonHelper.fromJson(json, XyzData.class);
如果json中的{“_id”:ObjectId(“595cc3e6cbaa230d3c764649”)}不重要,那么您可以从json中删除它,然后执行您正在执行的操作
Document doc = (Document) DataDao.findOne("Id");
doc.remove("_id");
final JsonWriterSettings settings = JsonWriterSettings.builder().outputMode(JsonMode.SHELL).build();
String json = doc.toJson(settings);
XyzData xyzData = jsonHelper.fromJson(json, XyzData.class);
我知道json是无效的。我使用Intellij IDEA,它显示了这一点。但是这个JSON是由RoboMongo生成的,我应该在测试中使用它。我知道JSON无效。我使用Intellij IDEA,它显示了这一点。但是这个JSON是由RoboMongo生成的,我应该在测试中使用它,我知道。我需要解决这个错误的JSON。它是由RoboMongo生成的,RoboMongo已经处理过了,我知道。我需要解决这个错误的JSON。它由RoboMongo生成,RoboMongo已经对其进行了处理。