Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ObjectId函数反序列化JSON以映射<;字符串,对象>;_Java_Json_Jackson - Fatal编程技术网

Java 使用ObjectId函数反序列化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

我想将json字符串解析为
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已经对其进行了处理。