java - Jackson XML 到 JSON 格式列表不正确

标签 java json xml jackson

我正在将原始 XML 输入转换为 JSON,但我对所需的输出结构有疑问(列表显示不正确)。导入的 XML 结构可能与下面的示例不同,因此使用 POJO 和简单的注释是不可行的。下面的示例 XML 输入:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<gang>
    <id>435dfb3f-1129-4375-b0f9-09955d7434cc</id>
    <name>Brew's Crews</name>
    <members>
        <member>
            <member>d3433b1c-a93d-4af1-b698-89fcd921e48d</member>
            <dateJoined/>
        </member>
        <member>
            <member>8ac9f5bc-5710-4cb1-a75d-839e211f0286</member>
            <dateJoined/>
        </member>
    </members>
    <anthem/>
    <logo>http://localhost:8080/cloud/master-index-record/raw/58338b91-2390-44a7-ac31-581c5dd921e1</logo>
</gang>

我正在使用 Jackson 将 XML 转换为 JSON(XML 已经是一个字符串并由“结果”变量表示)

XmlMapper xmlMapper = new XmlMapper();
Object entry = xmlMapper.readValue(result, Object.class);   
ObjectMapper jsonMapper = new ObjectMapper();
return  jsonMapper.writeValueAsString(entry);

生成以下 JSON:

{
  "id": "435dfb3f-1129-4375-b0f9-09955d7434cc",
  "name": "Brew's Crews",
  "members": {
    "member": {
      "member": "8ac9f5bc-5710-4cb1-a75d-839e211f0286",
      "dateJoined": null
    }
  },
  "anthem": null,
  "logo": "http://localhost:8080/cloud/master-index-record/raw/58338b91-2390-44a7-ac31-581c5dd921e1"
}

我的问题是“成员”元素应该像下面这样分组在一个 JSON 数组中:

"members":[{"member":blah,"dateJoined":null},{"member":blah2,"dateJoined":null}]

但它们不是......是否需要对 XML 映射器或对象映射器进行特定配置才能实现这些预期结果?

最佳答案

Jackson 通常无法处理通用类型,例如 Object。当你这样做时 -

Object entry = xmlMapper.readValue(result, Object.class);   

Jackson 不知道它应该反序列化的对象的结构。

你可以试试这个 -

class Member {
    private String memberId;
    private String dateJoined;
}

class Gang {
    private String id;
    private String name;
    private List<Member> members;
    private String anthem;
    private String logo;
}

class Test {

    public static void main(String[] args) {
        String result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Gang><id>435dfb3f-1129-4375-b0f9-09955d7434cc</id><name>Brew's Crews</name><members><member><memberId>d3433b1c-a93d-4af1-b698-89fcd921e48d</memberId><dateJoined/></member><member><memberId>8ac9f5bc-5710-4cb1-a75d-839e211f0286</memberId><dateJoined/></member></members><anthem/><logo>http://localhost:8080/cloud/master-index-record/raw/58338b91-2390-44a7-ac31-581c5dd921e1</logo></Gang>";

        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

        Object entry = xmlMapper.readValue(result, Gang.class);   
        ObjectMapper jsonMapper = new ObjectMapper();
        jsonMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

        System.out.println(jsonMapper.writeValueAsString(entry));
    }

}

关于java - Jackson XML 到 JSON 格式列表不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613881/

相关文章:

java - 已删除的项目仍显示在“结果”页面上。

javascript - 使用 Javascript/JQUery 解析 JSON 文件

json - 在 Angular 6 的组件中处理来自 observable 的数据

javascript - 让 XML 以 HTML 形式显示

php - simplexml_load_file 仅在实时网站上不起作用

java - 尝试使用 HTTPPOST 时出现与 doInBackground 相关的异步错误

java - 使用 java Runtime api 运行 grep 命令

java - 使用 OrientDB 时 Kawa 中的类加载器问题

json - 使用 jq 合并 2 个 JSON 对象

javascript - Magento - 在我的 <head> 部分中找不到哪些源文件加载 .js