Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson XML到JSON未正确格式化列表_Java_Json_Xml_Jackson - Fatal编程技术网

Java Jackson XML到JSON未正确格式化列表

Java Jackson XML到JSON未正确格式化列表,java,json,xml,jackson,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

我正在将原始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>
生成了以下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"
}
我的问题是“members”元素应分组在JSON数组中,如下所示:

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

但它们不是……是否需要对XML映射器或对象映射器进行特定配置以实现这些期望的结果?

Jackson通常无法处理诸如
对象
之类的通用类型。当你这样做的时候-

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));
    }

}
类成员{
私有字符串成员ID;
私有字符串日期连接;
}
班帮{
私有字符串id;
私有字符串名称;
非公开名单成员;
私人弦歌;
私人字符串标志;
}
课堂测试{
公共静态void main(字符串[]args){
字符串结果=“435dfb3f-1129-4375-b0f9-09955d7434ccBrew的Crewsd3433b1c-a93d-4af1-b698-89fcd921e48d8ac9f5bc-5710-4cb1-a75d-839e211f0286http://localhost:8080/cloud/master-索引记录/raw/58338b91-2390-44a7-ac31-581c5dd921e1”;
XmlMapper XmlMapper=新的XmlMapper();
setVisibility(PropertyAccessor.FIELD,Visibility.ANY);
Object entry=xmlMapper.readValue(结果,Gang.class);
ObjectMapper jsonMapper=新的ObjectMapper();
jsonMapper.setVisibility(PropertyAccessor.FIELD,Visibility.ANY);
System.out.println(jsonMapper.writeValueAsString(entry));
}
}
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));
    }

}