使用复杂的数据结构将 json 字符串解析为 java (jackson)
Parsing json string to java with complex datastructure(jackson)
我试图将下面的 json 字符串转换为 java 对象,但我得到的是空对象。
prop2对象下,可以有任意数量的键值对(key为字符串,value为数组)
{
"Level1": {
"prop1": "",
"prop2": {
"one": [{
"ip": "1.2.3.4",
"port": "100"
}],
"ten": [{
"ip": "10.20.20.10",
"port": "200"
}]
}
}
}
我有这个 class 结构,但是我得到的 ipAndPorts 映射为空。
@JsonIgnoreProperties(ignoreUnknown = true)
static class Root {
@JsonProperty("Level1")
private Level1 level1;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
@JsonProperty("prop2")
private Prop2 prop2;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Prop2 {
private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class IpAndPort {
@JsonProperty("port")
private String port;
}
我的 java class 应该是什么样子才能正确表示 "prop2"?
备案:问题已通过使用
解决
@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
@JsonProperty("prop2")
private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}
直接不用Prop2
class。否则杰克逊会期望 JSON 属性 在 prop2
JSON 对象下调用 ipAndPorts
。
我建议您首先按照希望的方式创建 Java class,然后使用 Jackson 将其序列化为 JSON。您将看到结果 JSON 的结构是什么,并查看您是否以及如何需要修改您的 class.
我试图将下面的 json 字符串转换为 java 对象,但我得到的是空对象。 prop2对象下,可以有任意数量的键值对(key为字符串,value为数组)
{
"Level1": {
"prop1": "",
"prop2": {
"one": [{
"ip": "1.2.3.4",
"port": "100"
}],
"ten": [{
"ip": "10.20.20.10",
"port": "200"
}]
}
}
}
我有这个 class 结构,但是我得到的 ipAndPorts 映射为空。
@JsonIgnoreProperties(ignoreUnknown = true)
static class Root {
@JsonProperty("Level1")
private Level1 level1;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
@JsonProperty("prop2")
private Prop2 prop2;
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class Prop2 {
private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}
@JsonIgnoreProperties(ignoreUnknown = true)
static class IpAndPort {
@JsonProperty("port")
private String port;
}
我的 java class 应该是什么样子才能正确表示 "prop2"?
备案:问题已通过使用
解决@JsonIgnoreProperties(ignoreUnknown = true)
static class Level1 {
@JsonProperty("prop2")
private Map<String, List<IpAndPort>> ipAndPorts = Collections.emptyMap();
}
直接不用Prop2
class。否则杰克逊会期望 JSON 属性 在 prop2
JSON 对象下调用 ipAndPorts
。
我建议您首先按照希望的方式创建 Java class,然后使用 Jackson 将其序列化为 JSON。您将看到结果 JSON 的结构是什么,并查看您是否以及如何需要修改您的 class.