将XML转换为JSON格式

我必须将docx文件格式(采用openXML格式)转换为JSON格式。 我需要一些指导方针来做到这一点。 提前致谢。

您可以查看提供XML到JSON转换的Json-lib Java库。

String xml = "1.2123"; XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read( xml ); 

如果您还需要root标签,只需添加一个外部虚拟标签:

 String xml = "1.2123"; XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read("" + xml + ""); 

XML和JSON之间没有直接映射; XML带有类型信息(每个元素都有一个名称)以及命名空间。 因此,除非每个JSON对象都嵌入了类型信息,否则转换将是有损的。

但这并不一定重要。 重要的是JSON的消费者知道数据合同。 例如,给定这个XML:

   Foo   Dummy Data   

你可以把它转换成这个:

 { "books": [ { "author": "Jimbo Jones", "title": "Bar Baz", "summary": "Foo" }, { "author": "Fake Person", "title": "Don't Care", "summary": "Dummy Data" }, ] } 

并且消费者不需要知道books集合中的每个对象都是book对象。

编辑:

如果您有XML的XML Schema并且正在使用.NET,则可以使用xsd.exe从架构生成类。 然后,您可以将源XML解析为这些类的对象,然后使用DataContractJsonSerializer将类序列化为JSON。

如果您没有架构,那么自己手动定义JSON格式将很难解决。

org.json命名空间中的XML类为您提供此function。

您必须调用静态toJSONObject方法

将格式良好(但不一定有效)的XML字符串转换为JSONObject。 由于JSON是数据格式而XML是文档格式,因此在此转换中可能会丢失某些信息。 XML使用元素,属性和内容文本,而JSON使用无序的名称/值对集合和值数组。 JSON不喜欢区分元素和属性。 类似元素的序列表示为JSONArrays。 内容文本可以放在“内容”成员中。 注释,序言,DTD和<[[]]>将被忽略。

如果您对各种实现不满意,请尝试滚动自己的实现。 这是我今天下午写的一些代码,以帮助您入门。 它适用于net.sf.json和apache common-lang:

 static public JSONObject readToJSON(InputStream stream) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); SAXParser parser = factory.newSAXParser(); SAXJsonParser handler = new SAXJsonParser(); parser.parse(stream, handler); return handler.getJson(); } 

和SAXJsonParser实现:

 package xml2json; import net.sf.json.*; import org.apache.commons.lang.StringUtils; import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import java.util.ArrayList; import java.util.List; public class SAXJsonParser extends DefaultHandler { static final String TEXTKEY = "_text"; JSONObject result; List stack; public SAXJsonParser(){} public JSONObject getJson(){return result;} public String attributeName(String name){return "@"+name;} public void startDocument () throws SAXException { stack = new ArrayList(); stack.add(0,new JSONObject()); } public void endDocument () throws SAXException {result = stack.remove(0);} public void startElement (String uri, String localName,String qName, Attributes attributes) throws SAXException { JSONObject work = new JSONObject(); for (int ix=0;ix
		      	

如果您需要能够在将XML转换为JSON之前对其进行操作,或者希望对表示进行细粒度控制,请使用XStream。 它之间的转换非常简单:xml-to-object,json-to-object,object-to-xml和object-to-json。 以下是XStream文档中的一个示例:

XML:

  Joe Walnes  123 1234-456   123 9999-999   

POJO(DTO):

 public class Person { private String firstname; private String lastname; private PhoneNumber phone; private PhoneNumber fax; // ... constructors and methods } 

从XML转换为POJO:

 String xml = "..."; XStream xstream = new XStream(); Person person = (Person)xstream.fromXML(xml); 

然后从POJO到JSON:

 XStream xstream = new XStream(new JettisonMappedXmlDriver()); String json = xstream.toXML(person); 

注意:虽然方法读取toXML() XStream将生成JSON,因为使用了Jettison驱动程序。

将完整的docx文件转换为JSON看起来不是一个好主意,因为docx是一种以文档为中心的XML格式,而JSON是一种以数据为中心的格式。 XML通常被设计为以文档和数据为中心。 尽管将文档中心XML转换为JSON技术是可行的,但处理生成的数据可能过于复杂。 尝试关注实际需要的数据并仅转换该部分。

如果你有一个xml片段的有效dtd文件,那么你可以使用开源的eclipse链接jar轻松地将xml转换为json,将json转换为xml。 详细示例JAVA项目可以在这里找到: http : //cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html

我遇到了一个教程,希望它可以帮到你。 http://www.techrecite.com/xml-to-json-data-parser-converter

Docx4j

我之前使用过docx4j ,值得一看。

unXml

您还可以查看我在Maven Central上可用的开源unXml -library。

它是轻量级的,并且具有从xml中选择XPath的简单语法,并将它们作为Json属性返回到Jackson ObjectNode