Java 使用Jackson读取最外层的JSON对象,但不读取最内层的JSON对象?

Java 使用Jackson读取最外层的JSON对象,但不读取最内层的JSON对象?,java,json,jackson,jackson-databind,Java,Json,Jackson,Jackson Databind,这和问题相似,但有点不同 假设我有一个定义如下的json文档: [ {“类型”:“类型1”, “键1”:“值1”}, {“类型”:“类型2”, “键2”:“值2”} ] 我想将此json文档读入字符串列表(list)。我只想将最外层的列表读入Java列表,列表中的json对象应该与列表中的json对象保持一致。结果应与此等效(我忽略换行符等): 注意,我不想创建任何DTO来保存一些中间表示。我只希望“列表”下的所有内容都能“按原样”表示 我怎样才能做到这一点 我使用的是Jackson 2.12

这和问题相似,但有点不同

假设我有一个定义如下的json文档:

[
{“类型”:“类型1”,
“键1”:“值1”},
{“类型”:“类型2”,
“键2”:“值2”}
]
我想将此json文档读入字符串列表(
list
)。我只想将最外层的列表读入Java
列表
,列表中的json对象应该与列表中的json对象保持一致。结果应与此等效(我忽略换行符等):

注意,我不想创建任何DTO来保存一些中间表示。我只希望“列表”下的所有内容都能“按原样”表示

我怎样才能做到这一点


我使用的是Jackson 2.12.1。

如果您不想在DTO中保留中间表示,那么实现所需反序列化的一种方法是:

// Create a ObjectMapper (of type com.fasterxml.jackson.databind.ObjectMapper)
ObjectMapper mapper = new ObjectMapper();
// Read the json string into a List. This will be deserialized as a collection of LinkedhashMap
 List<LinkedHashMap> list = mapper.readValue(getInputString(), List.class);
//Iterate over the deserialized collection and create a JSONObject from every LinkedHashMap
 List<String> result = list.stream()
                           .map(map -> new JSONObject(map).toString())
                           .collect(Collectors.toList());

这种方法的缺点是,它会影响性能。

谢谢,但从性能角度看,这不是很糟糕吗?它将把它转换成一个“映射”,然后转换成一个“JsonObject”,然后再转换回一个(json)字符串。我认为这样做可以更快,因为需要解析的数据更少(只是外部列表)。是的,这是这种方法的缺点。如果有DTO,可以避免这种情况,通过
@JsonIgnoreProperties
注释可以避免不需要反序列化的特定字段
// Create a ObjectMapper (of type com.fasterxml.jackson.databind.ObjectMapper)
ObjectMapper mapper = new ObjectMapper();
// Read the json string into a List. This will be deserialized as a collection of LinkedhashMap
 List<LinkedHashMap> list = mapper.readValue(getInputString(), List.class);
//Iterate over the deserialized collection and create a JSONObject from every LinkedHashMap
 List<String> result = list.stream()
                           .map(map -> new JSONObject(map).toString())
                           .collect(Collectors.toList());
[{"key1":"value1","type":"Type1"}, {"key2":"value2","type":"Type2"}]