[英]How to convert list map to json string and json to list map
[英]Convert List of Json input to Map of Map
我有以下格式的字符串输入:
输入字符串: [{ "id":"1", "name":"A", "address":"St 1"},{ "id":"2", "name":"B", "address":"St 2"}, ...]
我希望能够将其转换为Map<String, Map<String, String>>
格式。 所以,像:
必填 Output 格式: {1: {id:1, name:"A", address: "St 1"} 2: {id:2, name:"B", address: "St 2"}}
我创建了一个 class 来帮助解析输入:
public class Student{
private String id;
private String name;
private String address;
}
我试图通过杰克逊的 ObjectMapper 来获取以下格式的数据:列表格式,然后使用 Collectors.toMap() 将其转换为 Map 格式的 Map 格式。
到目前为止,我看到的所有示例都建议采用如下方法:
List<Student> student = objectMapper.readValue(inputString, new TypeReference<List<Student>>(){});
Map <String, Student> studentTempMap = student.stream().collect().(Collectors.toMap(Student::getId, Function.identity()));
这使得 studentTempMap 类似于: {1: object of Student("id":"1", "name":"A", "address":"St 1"), 2: object of Student("id": “2”,“名称”:“B”,“地址”:“St 2”),...}
从这里开始的蛮力方法:
我不想使用这种蛮力方法,因为我有大量的学生对象。
有没有办法通过 ObjectMapper 直接以Map<String, Map<String, String>>
格式获取 output? 或者有没有办法通过 Collectors.toMap 将其解析为上述格式?
我希望能够将其转换为
Map<String, Map<String, String>>
如果你想得到一个嵌套的 map 字符串Map<String,Map<String,String>>
作为结果,你不需要将 JSON 转换为 POJO 列表。
相反,您可以将 JSON 解析为地图List<Map<String,String>>
,然后生成嵌套的 map 。
String inputString = """
[{ "id":"1", "name":"A", "address":"St 1"},
{ "id":"2", "name":"B", "address":"St 2"}]""";
ObjectMapper objectMapper = new ObjectMapper();
List<Map<String, String>> students = objectMapper.readValue(
inputString, new TypeReference<>() {}
);
Map<String, Map<String, String>> studentMapById = students.stream()
.collect(Collectors.toMap(
map -> map.get("id"), // key
Function.identity(), // value
(left, right) -> left // resolving duplicates
));
studentMapById.forEach((k, v) -> System.out.println(k + " : " + v));
Output:
1 : {id=1, name=A, address=St 1}
2 : {id=2, name=B, address=St 2}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.