gpt4 book ai didi

java - 是否可以通过 Jackson 获取嵌套子级的 JsonRootName ?

转载 作者:行者123 更新时间:2023-11-30 07:08:39 28 4
gpt4 key购买 nike

我有嵌套对象,当我使用 jackson 将其序列化为 json 时,我想从中获取根名称。这就是我想要的结果(我向所有花卉爱好者道歉,但只是需要一个例子,这不能被解释为准确的数据):

{
"plants": "flowers",
"types": {
"rose" : {
"color": "red",
"height": 25,
}
}
}

我有 2 个类,一个包装类:

public class JsonWrapper {
public String plants = "flowers";
public Object types;
}

和“花”类:

@JsonRootName("rose")
public class rose{
public String color = "red";
public int height = 25;
}

现在我要做的是:

JsonWrapper wrapper = new JsonWrapper();
wrapper.types = new rose();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
String jsonInString = mapper.writeValueAsString(wrapper);

我得到的结果是:

{
"JsonWrapper":{
"plants": "flowers",
"types": {
"color": "red",
"height": 25,
}
}
}

因此,我获得了未注释的包装器对象的根名称,但没有获得注释的子对象的根名称。有没有办法告诉 jackson 不要在没有根名称的情况下获取根名称并分析子对象?

最佳答案

没有 JsonRootName 的替代解决方案。

JsonWrapper.java

import java.util.HashMap;
import java.util.Map;

public class JsonWrapper {
public String plants = "flowers";
Map<String, Flower> types = new HashMap<>();

public Map<String, Flower> getTypes() {
return types;
}

public void setTypes(Map<String, Flower> types) {
this.types = types;
}
}

Flower.java

public class Flower {
public String color = "red";
public int height = 25;
}

Main.java

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {

public static void main(String[] args) throws JsonProcessingException {
JsonWrapper wrapper = new JsonWrapper();
wrapper.getTypes().put("rose", new Flower());
ObjectMapper mapper = new ObjectMapper();
String jsonInString = mapper.writeValueAsString(wrapper);
System.out.println(jsonInString);

}
}

关于java - 是否可以通过 Jackson 获取嵌套子级的 JsonRootName ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39597316/

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