gpt4 book ai didi

java - 使用自定义类类型将 json 文件转换为 Java 映射

转载 作者:行者123 更新时间:2023-12-01 19:04:47 24 4
gpt4 key购买 nike

所以我目前正在尝试将 json 文件转换为 java map 。我只是使用以下代码,它可以正常工作:

ObjectMapper mapper = new ObjectMapper();
try {
Map<String, Object> map = mapper.readValue(new File(
"res/cache.json"), new TypeReference<Map<String, Object>>() {
});

} catch (Exception e) {
e.printStackTrace();
}

但是,问题是我不希望 map 的类型为 Map<String, Object>而是 Map<String, NodeType> ,我在其中创建了一个新的静态类,如下所示。

static class NodeType {
// A map of all the nodes, for example '{0001 : node, 0002 : anotherNode}'
public Map<String, Node> nodes; //Note: Node is another static class containing a map of values.

public NodeType() {
nodes = new HashMap<>();
}
}

我的解决方案是替换 new TypeReference<Map<String, Object>>new TypeReference<Map<String, NodeType>>但我目前收到一个错误,其中 json 和类的结构不太匹配。为了尝试解释,该类将每个变量作为 json 中的键/值,然后将映射作为另一个键/值映射。有谁知道我如何“展平”NodeType 类以使两个结构匹配。

谢谢。

Json 文件内容:

{
"areas" : {
"0001" : {
"lightsOn" : false,
"volume" : 30,
"musicPlaying" : true,
"videoPlaying" : false
},
"0002" : {
"lightsOn" : false,
"volume" : 15,
"musicPlaying" : true,
"videoPlaying" : false
},
"0003" : {
"lightsOn" : true,
"volume" : 60,
"musicPlaying" : true,
"videoPlaying" : false
}
},
...
}

补充一下,当我通过对象映射器解析 NodeType 类时,我得到了:

{
"nodes" : {
"0002" : {
"states" : {
"volume" : 15,
"musicPlaying" : true,
"lightsOn" : false,
"videoPlaying" : false
}
},
"0003" : {
"states" : {
"volume" : 60,
"musicPlaying" : true,
"lightsOn" : true,
"videoPlaying" : false
}
},
"0001" : {
"states" : {
"volume" : 30,
"musicPlaying" : true,
"lightsOn" : false,
"videoPlaying" : false
}
}
}
}

编辑:我觉得本教程可能走在正确的轨道上 - https://www.baeldung.com/jackson-map

最佳答案

您可以创建与您的文件匹配的 JSON 表示形式,也可以手动(反)序列化 JSON。

JSON 表示形式可能类似于

public class JSONContent {

private Map<String, AreasContent> areas;
}

public class AreasContent {

private boolean lightsOn;
private int volume;
private boolean musicPlaying;
private boolean videoPlaying;
}

用法:

JSONContent jsonContent = mapper.readValue(new File("res/cache.json"), JSONContent.class);

编辑:

关于您的评论,您可以尝试类似的操作

public class JSONContent {

private Map<String, Map<String, Object>> areas;
}

用法如上。

关于java - 使用自定义类类型将 json 文件转换为 Java 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59579651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com