我要的docx文件格式(這是OpenXML格式)轉換成JSON格式。我需要一些準則來做到這一點。提前致謝。轉換XML到JSON格式
回答
有XML和JSON之間沒有直接的映射; XML帶有類型信息(每個元素都有一個名稱)以及命名空間。因此,除非每個JSON對象都嵌入了類型信息,否則轉換將是有損的。
但是,這並不必然關係。重要的是JSON的消費者知道數據合同。例如,鑑於此XML:
<books>
<book author="Jimbo Jones" title="Bar Baz">
<summary>Foo</summary>
</book>
<book title="Don't Care" author="Fake Person">
<summary>Dummy Data</summary>
</book>
</books>
你可以將其轉換爲這樣的:
{
"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格式。
你可以看看的Json-lib Java庫,它提供XML到JSON的轉換。
String xml = "<hello><test>1.2</test><test2>123</test2></hello>";
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xml);
如果你需要根標籤太多,只需添加一個外部僞標籤:
String xml = "<hello><test>1.2</test><test2>123</test2></hello>";
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read("<x>" + xml + "</x>");
這將是很好的,但結果是'{ 「測試」: 「1.2」, 「TEST2」: 「123」}'和不'{ 「你好」:{ 「測試」: 「1.2」, 「TEST2」: 「123」}}',就是隻打印葉子(''標籤丟失)。如果我們添加一箇中間節點(''的子節點和'
如果您需要能夠操縱你的XML,然後纔會慢慢轉化爲JSON,或想細用XStream進行粒度控制。在xml-to-object,json-to-object,object-to-xml和object-to-json之間進行轉換非常簡單。下面是XStream's docs一個例子:
XML:
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>
POJO(DTO):
public class Person {
private String firstname;
private String lastname;
private PhoneNumber phone;
private PhoneNumber fax;
// ... constructors and methods
}
從XML轉換爲POJO:
String xml = "<person>...</person>";
XStream xstream = new XStream();
Person person = (Person)xstream.fromXML(xml);
然後從POJO到JSON :
XStream xstream = new XStream(new JettisonMappedXmlDriver());
String json = xstream.toXML(person);
注:儘管方法讀取toXML()
由於使用了Jettison驅動程序,因此XStream將生成JSON。
轉換完成docx文件成JSON看起來並不像一個好主意,因爲DOCX是一個文檔爲中心的XML格式和JSON是一個以數據爲中心的格式。一般而言,XML旨在兼顧文檔和數據。雖然技術上可能將以文檔爲中心的XML轉換爲JSON,但處理生成的數據可能過於複雜。嘗試專注於實際需要的數據並僅轉換該部分。
org.json命名空間中的XML class爲您提供了此功能。
你必須調用靜態toJSONObject method
合式(但不一定有效)的XML字符串轉換成一個JSONObject。由於JSON是一種數據格式,XML是一種文檔格式,因此在這種轉換中可能會丟失一些信息。 XML使用元素,屬性和內容文本,而JSON使用名稱/值對和值數組的無序集合。 JSON並不喜歡區分元素和屬性。類似元素的序列表示爲JSONArrays。內容文本可以放在「內容」成員中。評論,序言,DTD和< [[]]>將被忽略。
這絕對是最簡單和最乾淨的方法。謝謝。 – 2012-12-28 15:58:14
我試圖使用它,但它創建了基於xml的Node/text。如何創建基於屬性的XML?例如:如果我的JSON數據是: {訂單:{訂單行:{的ItemID: 「1234」}},OrderNo: 「4567」} Reqrd O/P: <訂單OrderNo = 「4567」><訂單行的ItemID =「1234 「/>這是基於節點的。我正在查看屬性基礎xml轉換。請告訴我,如果您有任何建議。 – Aki 2013-01-27 15:08:02
如果您不滿意的各種實現方式,嘗試滾動自己。下面是我今天下午爲了讓你開始寫的一些代碼。它的工作原理與net.sf.json和Apache共郎鹹平:
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<JSONObject> stack;
public SAXJsonParser(){}
public JSONObject getJson(){return result;}
public String attributeName(String name){return "@"+name;}
public void startDocument() throws SAXException {
stack = new ArrayList<JSONObject>();
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<attributes.getLength();ix++)
work.put(attributeName(attributes.getLocalName(ix)), attributes.getValue(ix));
stack.add(0,work);
}
public void endElement (String uri, String localName, String qName) throws SAXException {
JSONObject pop = stack.remove(0); // examine stack
Object stashable = pop;
if (pop.containsKey(TEXTKEY)) {
String value = pop.getString(TEXTKEY).trim();
if (pop.keySet().size()==1) stashable = value; // single value
else if (StringUtils.isBlank(value)) pop.remove(TEXTKEY);
}
JSONObject parent = stack.get(0);
if (!parent.containsKey(localName)) { // add new object
parent.put(localName, stashable);
}
else { // aggregate into arrays
Object work = parent.get(localName);
if (work instanceof JSONArray) {
((JSONArray)work).add(stashable);
}
else {
parent.put(localName,new JSONArray());
parent.getJSONArray(localName).add(work);
parent.getJSONArray(localName).add(stashable);
}
}
}
public void characters (char ch[], int start, int length) throws SAXException {
JSONObject work = stack.get(0); // aggregate characters
String value = (work.containsKey(TEXTKEY) ? work.getString(TEXTKEY) : "");
work.put(TEXTKEY, value+new String(ch,start,length));
}
public void warning (SAXParseException e) throws SAXException {
System.out.println("warning e=" + e.getMessage());
}
public void error (SAXParseException e) throws SAXException {
System.err.println("error e=" + e.getMessage());
}
public void fatalError (SAXParseException e) throws SAXException {
System.err.println("fatalError e=" + e.getMessage());
throw e;
}
}
我所遇到的教程,希望它可以幫助你。 http://www.techrecite.com/xml-to-json-data-parser-converter
Docx4j
我以前用過docx4j,這是值得考慮看看。
unXml
您還可以看看我的開源unXml -library上可用Maven Central。
它輕量級,並有一個簡單的語法從XML中挑出XPath,並讓它們返回爲JacksonObjectNode
中的Json屬性。
如果你有一個有效的XML片段的dtd文件,那麼你可以很容易地使用開源的Eclipse鏈接jar將xml轉換爲json和json到xml。詳細示例Java項目可以在這裏找到:http://cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
- 1. 格式不正確-XML至Json轉換
- 2. 將RDF/XML格式轉換爲JSON
- 3. 轉換XML格式化的JSON
- 4. 轉換XML格式
- 5. 轉換XML格式
- 6. 轉換JSON格式
- 7. 轉換JSON格式
- 8. XML轉換到JSON錯誤
- 9. 簡化xml到json轉換
- 10. 轉換嵌套XML到JSON
- 11. xml到json轉換Spring/Java
- 12. 如何轉換到全JSON格式
- 13. XSD模式將XML數據轉換爲JSON格式的問題
- 14. xml到json到jsonp轉換器
- 15. AngularJS將json格式轉換成另一種json格式
- 16. 將json格式轉換爲其他數組類型json格式
- 17. jsonix:轉換json-> XML:日期格式忽略
- 18. 我如何將json轉換爲NiFi的soap xml格式
- 19. 在joint.js中將JSON轉換爲BPMN2 XML格式
- 20. 將架構演化(SCD)JSON/XML轉換爲ORC/Parquet格式
- 21. 使用BizTalk將XML轉換爲JSON格式
- 22. java中的XML到JSON轉換
- 23. 對象/ JSON到XML轉換C#
- 24. XML到json轉換器的標籤
- 25. XML到JSON轉換訪問成員
- 26. XML到JSON轉換缺少元素
- 27. marklogic中的XML到JSON轉換
- 28. Azure Logic App - JSON到XML的轉換
- 29. AS3中的JSON到XML轉換
- 30. XML到JSON轉換的問題
如何進行這種轉換。該輸入XML有些複雜,所以轉換必須易於並具有良好的performance..Which語言者優先做到這一點? – vignesh 2011-02-25 05:00:01
這正是[XML-ValidatorBuddy(http://www.xml-tools.com/ValidatorBuddy.htm)可以 – Fluffi1974 2012-07-15 13:22:34
你做雅各, 我用您的代碼示例,並已成功轉換的XML文件到一個JSON對象。但是,我的XML文件表示一個根元素()和一個分組元素(),其中所有其他元素都是嵌套的。該元素是什麼,我以後,它可以包含屬性,兒童和盛大子元素的任何變化等 有我來回報每元素的ArrayList 的方式。換句話說,我可以指定類似於XPath的東西,但仍然使用SAX? P.S:由於大小限制,我無法使用DOM。 –
2016-11-11 00:07:34