【问题标题】:XML to JSON conversion missing the elementXML 到 JSON 的转换缺少元素
【发布时间】:2014-10-25 08:53:07
【问题描述】:

我是 JAVA 编程的新手,正在尝试使用以下代码段将 XML 转换为 JAVA。

输入文件:

<?xml version="1.0" encoding="UTF-8"?>
-<ns0:MT_ECCJDBC xmlns:ns0="urn:xml:json">
-<REQUEST>
<ID>46565665</ID>
</REQUEST>
</ns0:MT_ECCJDBC>

输出:

{
  "@xmlns:ns0": "urn:xml:json",
  "REQUEST": ["46565665"]
}

JSON 中的预期输出是

{
   "REQUEST": 

{
   " ID " : ["46565665"]
}

}

下面是我的java代码:

public class ConversionXMLtoJSON {

    public static void main(String[] args) throws Exception {

                    {
        InputStream is = ConversionXMLtoJSON.class.getResourceAsStream("instance.xml");
        String xml = IOUtils.toString(is);
        XMLSerializer xmlSerializer = new XMLSerializer();
        JSON json = xmlSerializer.read( xml );
        System.out.println( json.toString(2) );
    }                   
}
}

请建议我添加代码

  1. 要删除标签“@xmlns:ns0”:“urn:xml:json”,
  2. 在 JAVA 代码中添加 ID 元素。

问候

【问题讨论】:

  • XML 的格式是否固定?如果是这样,我会给你一个答案。
  • @Robin 看看herehere

标签: java json


【解决方案1】:

您可以将 XML 映射到 Java 对象,然后使用 JSON 生成器生成 JSON。我喜欢使用 jackson-mapper-asl、jackson-core-asl 和 jackson-dataformat-xml。

将 XML 绑定到 Java:

public class XmlRequest {

    @JacksonXmlElementWrapper(localName="REQUEST")
    private REQUEST request;


    public static class REQUEST {
        @JacksonXmlProperty(localName="ID")
        protected int ID;

        public int getID() {
            return ID;
        }

        public void setID(int iD) {
            ID = iD;
        }

    }

    public REQUEST getRequest() {
        return request;
    }

    public void setRequest(REQUEST request) {
        this.request = request;
    }
}

生成 JSON:

XmlMapper mapper = new XmlMapper();
XmlRequest request = (XmlRequest) mapper.readValue(App.class.getResourceAsStream("/NewFile.xml"), XmlRequest.class);

StringWriter sw = new StringWriter();

JsonGenerator jsongen = new JsonFactory().createJsonGenerator(System.out);

jsongen.writeStartObject();
jsongen.writeFieldName("REQUEST");
jsongen.writeStartObject();     
jsongen.writeFieldName("ID");
jsongen.writeStartArray();
jsongen.writeNumber(request.getRequest().getID());
jsongen.writeEndArray();
jsongen.writeEndObject();
jsongen.writeEndObject();
jsongen.close();

【讨论】:

  • 亲爱的菲利普,感谢您的回复。我正在尝试实施您的程序。搜索所有需要的包,直到我执行。
  • 你需要jackson-mapper-asl、jackson-core-asl和jackson-dataformat-xm包
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多