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

在Java中,如何将JSON或XML字符串映射到同一POJO,但XML与JSON具有不同的字段/属性名称?

冯阳华
2023-03-14

我目前正在使用Jackson的XmlMapper和ObjectMapper。我想将该字符串映射到一个POJO(我想我正确地使用了该术语),该POJO有一个与JSON字符串字段同名的私有字段。XML字符串对于同一字段/属性有不同的名称,我想使用JSON字段名称。

我还想从本质上“忽略”该字段(同时保留它),并将其存储为类似于JsonNode的内容,因为该字段的值可以是一些复杂的嵌套值,而没有已知的形状。

例子:

public static class OuterClass {
    private String firstValue;
    private InnerClass innerValue;

    // ... getters/setters
}

public static class InnerClass {
    private JsonNode data;    // complex, nested, so no POJO to map to
    private String otherValue;

    // ... getters/setters
}

JSON可能如下所示:

{
    "innerValue": {
        "data": {
            ... complex stuff
        },
        "otherValue": "more stuff"
    },
    "firstValue": "thingy"
}

XML可能如下所示:

<result>
  <innerValue>
    <incorrectName>
      ... complex stuff
    </incorrectName>
    <otherValue>more stuff</otherValue>
  </innerValue>
  <firstValue>thingy</firstValue>
</result>

因此,目标是让XML与该类一起工作,包括将不正确的名称映射到类的数据,以及将复杂的内部部分存储为类似于JsonNode的内容,因为我没有一个类来建模它。

我让JSON与new ObjectMapper(). readValue(jsonString,OuterClass.class)一起工作,我认为XML应该与new XmlMapper(). readValue(xmlString,OuterClass.class)一起工作,但是我不知道在哪里与注释一起去。我已经查看了可用的不同注释,但我认为我没有找到合适的注释。我还读到,我不应该将XML转换为JsonNode,因为这可能会有问题。不过,我不需要在收到JSON/XML字符串后将其转换回XML,并且可以将其视为JSON。所以,我很感激你的帮助,谢谢!

共有1个答案

白子默
2023-03-14
@XmlAccessorType(XmlAccessType.PROPERTY)
public static class InnerClass {

    private JsonNode data;    // complex, nested, so no POJO to map to
    private String otherValue;

    // ... getters/setters
    @XmlElement(name = "incorrectName")
    protected JsonNode getData() {return data;}
}
 类似资料:
  • 我正在编写一个JSON接口/库,用于Bugzilla的webservice。 这可以使用注释或其他内容吗?还是要为每个这样的实例编写一个自定义反序列化程序? 我试着做了一些研究,发现了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反bean吗?我发现新特性的文档很少或难以理解。 示例: 我对一个字段使用pojo的原因是,这个用户类是由另一个具有更多字段的用户类扩展的。虽然我可以实现一个

  • 问题内容: Jackson json注释中以下jax-b注释的等效方式是什么? 我需要生成json而不是xml,并且需要了解在jax-b中等效表示的常规jackson批注。 重命名字段。 使用getter代替字段。 如果json / xml元素名称是Java保留字(例如“ ”,“ ”,“ ”等),则这些功能尤其重要。 因此我们必须将POJO字段分别命名为“ new ”,“ _ public ”,“

  • Java类(用作数据传输对象): 类资源还有一个名为的字段,它的getter和setter具有不同的类型,因此出现语法错误。 由于上面的类是一个DTO,一个JSON响应(带有字段)将映射到它,并且不能使用getId(),我想将字段更改为,并相应地更改getter和setter,并用一个注释标记它,说明bind this to字段。 注意:我用的是Spring靴。我尝试使用@JSONProperty

  • 我有下一个任务:从某个目录中读取XML文件,并将其转换为JSON字符串。问题是:初始XML和JSON对应属性的名称不同,例如XML中的x_日期和JSON中的j_日期。 我创建了一个类,其中包含JSON的必填字段,并带有这样的注释: 我已经尝试对测试XML文件进行序列化/反序列化,它似乎工作正常。但我不确定同时用JacksonXmlProperty和JsonProperty注释字段是否合适。也许最好

  • ObjectWithList、ListWrapper和ObjectWithWrapper类如下: MyCustomConverter类来包装/展开这些列表。 mapperConfiguration。xml配置文件 不幸的是,映射后,objectWithList的列表字段为null。我使用了调试器,在这种情况下,Dozer甚至没有输入MyCustomConverter。 令人惊讶的是,不同方向的映射

  • 我有以下JSON字符串: 我将把它映射到以下模型: 当反序列化这个JSON字符串时,我希望能够在运行时将这些属性名称映射到不同的名称,如下所示: 例如,在反序列化过程中,我希望将“property1”的名称反序列化为“differen_property_name1”或“differen_property_name2”或“differen_property_name3”。因为我在运行时选择了新名称(