当前位置: 首页 > 知识库问答 >
问题:

使用Jackson Java反序列化具有无值属性的XML元素

邰胤
2023-03-14
<video src="https://google.com/sample.mp4">
    <param>s</param>
    <param>Y</param>
    <param>Z</param>
</video>
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

import java.util.ArrayList;
import java.util.List;

public class Video {
    @JacksonXmlProperty(isAttribute = true)
    private String src;

    @JacksonXmlElementWrapper(localName = "param", useWrapping = false)
    private List<String> param = new ArrayList<>();

    public String getSrc() {
        return src;
    }

    public List<String> getParam() {
        return param;
    }

    public void setParam(List<String> param) {
        this.param = param;
    }
}
{
    "src": "https://google.com/sample.mp4",
    "param": [
        "Z"
    ]
}
{
    "src": "https://google.com/sample.mp4",
    "param": [
        "s",
        "Y",
        "Z"
    ]
}
ObjectMapper mapper = new ObjectMapper(new XmlFactory());
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Video video = mapper.readValue(s, Video.class);
System.out.println(new ObjectMapper(new JsonFactory()).writeValueAsString(video));

有人能帮我把它弄好吗。谢谢你。

共有1个答案

齐阎宝
2023-03-14

我使用了以下代码,

XmlMapper mapper = new XmlMapper();
    mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
    Video video = mapper.readValue(s, Video.class);
    System.out.println(new ObjectMapper(new JsonFactory()).writeValueAsString(video));

XMLMapper是来自于程序包com.fasterxml.jackson.dataformat.xml.XMLMapper

希望对你有帮助。

 类似资料:
  • 问题内容: 我像这样反序列化json: 有效负载类型取决于类型。我的课: 我也输入了没有有效载荷的“ d”。如果我尝试反序列化: 它可以工作,但不能在没有有效负载的情况下工作: 如何使其与上一个示例一起使用? 我得到的错误的Stacktrace: 问题答案: 我也遇到了这个问题,找不到利用杰克逊(定制提供的机制的一流解决方案,等等)。 看起来像是处理外部类型ID的方式中的错误。我通过以下方法解决了

  • 我像这样反序列化jsons: 其中负载类型取决于类型。我的班级: 我得到的错误的堆栈跟踪:

  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 问题内容: 我有一个包含许多元素的XML文档,每个元素都有一个或属性。看到这个例子: 我需要一种方法告诉Simple将元素反序列化为a 和将元素反序列化为a 。 我怎样才能做到这一点? 如果您想使用它,这是我目前拥有的代码: 问题答案: 现在真正的问题… 我的回答: 没有!或至少,没关系! 像这里这样的属性只是字符串,不能做出任何决定。但是还有另一种好方法: 实施要为其做出决定的转换器 使用a 做

  • 我正在努力找出如何使用杰克逊将具有速记约定的 JSON 反序列化为 Java POJO。 这里的“类型”属性可以是字符串或对象。如果它是一个字符串,那么它被认为是具有默认属性的同一对象的简单简写形式。一、 上例中的1和2是等效的。 据我所知,可以为整个“类型”对象编写自定义反序列化器。据我所知,在这种情况下,我必须手动反序列化整个“类型”对象。但是我真的想只手动处理速记形式,并将正常处理委托给基于