gpt4 book ai didi

java - 如何编写Java类从Json中获取没有固定字段的对象?

转载 作者:行者123 更新时间:2023-11-30 03:40:56 25 4
gpt4 key购买 nike

我需要 Java 类来满足以下要求,并且它应该与 Jackson 使用对象映射器的解析兼容。

Json 的格式如下:

[
{
"name" : "Snehal",
"property1" : "value11",
"property2" : "value12",
"property3" : "value13",

},
{
"name" : "Masne",
"property1" : "value21",
"property2" : "value22",
"property3" : "value23",

},
]

在上面的 Json 中,没有。属性不是固定的,这意味着可以有属性 4、5、6 等

相应的Java类可以认为如下:

Class MyClass
{

String name;

List<String> properties;

// getters, setters, etc

}

但这并不能解决目的,因为在这种情况下,Json 将生成类似以下格式的内容:

[ 
{
"name" : "Snehal",
[
{"property" : "value1" },
{"property" : "value1" },
{"property" : "value1" }
]
},

{
.... []
}

]

如何实现Java类来获取指定Json格式的数据?

最佳答案

您可以使用@JsonAnyGetter/@JsonAnySetter注释来标记您的类除了声明的字段之外还具有“额外”属性。

这是一个例子:

public class JacksonAnyGetter {

static final String JSON = " { \n" +
" \"name\" : \"Snehal\",\n" +
" \"property1\" : \"value11\",\n" +
" \"property2\" : \"value12\",\n" +
" \"property3\" : \"value13\"\n" +
"\n" +
" }";

static class Bean {
public String name; // we always have name
private Map<String, Object> properties = new HashMap<>();

@JsonAnySetter
public void add(String key, String value) {
properties.put(key, value);
}

@JsonAnyGetter
public Map<String, Object> getProperties() {
return properties;
}

@Override
public String toString() {
return "Bean{" +
"name='" + name + '\'' +
", properties=" + properties +
'}';
}
}

public static void main(String[] args) throws IOException {
final ObjectMapper mapper = new ObjectMapper();
final Bean bean = mapper.readValue(JSON, Bean.class);
System.out.println(bean);
final String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(bean);
System.out.println(json);
}
}

输出:

Bean{name='Snehal', properties={property3=value13, property2=value12, property1=value11}}
{
"name" : "Snehal",
"property3" : "value13",
"property2" : "value12",
"property1" : "value11"
}

关于java - 如何编写Java类从Json中获取没有固定字段的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840861/

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