JAVA Version JSON to XML(JSON轉XML)

來源:互聯網
上載者:User

import java.io.IOException;<br />import java.io.StringReader;<br />import java.io.StringWriter;<br />import java.util.Iterator;</p><p>import javax.xml.transform.OutputKeys;<br />import javax.xml.transform.Source;<br />import javax.xml.transform.Transformer;<br />import javax.xml.transform.TransformerFactory;<br />import javax.xml.transform.stream.StreamResult;<br />import javax.xml.transform.stream.StreamSource;</p><p>import org.apache.wink.json4j.JSONArray;<br />import org.apache.wink.json4j.JSONException;<br />import org.apache.wink.json4j.JSONObject;</p><p>/**<br /> * Depend on json4j library<br /> * @author bitjjj<br /> *<br /> */<br />public class JsonToXML {</p><p> private static StringBuilder result = new StringBuilder(<br /> "<?xml version=/"1.0/" encoding=/"utf-8/"?>");<br /> private static String[] spacialChars = { "&", "<", ">", "/"", "'" };<br /> private static String[] validChars = { "&", "<", ">", ""","'" };</p><p> /**<br /> * @param args<br /> * @throws IOException<br /> * @throws JSONException<br /> */<br /> public static void main(String[] args){<br /> String jsonString = "{InterventionPlan:{"<br /> + "'name':'jeffco /" & <s<<cho>>ol>',"<br /> + "'item':[{title:'title1'},{title:'title2'},{title:'title3'}],"<br /> + "obj:{prop1:'val//'ue1',prop2:'value2'}}" + "}";</p><p> System.out.println(prettyFormat(toXml(jsonString),4));<br /> }</p><p> /**<br /> * For specail char there are bugs using this way to format xml string<br /> * Don't suggest to use this method,just for debugging<br /> * @param input<br /> * @param indent<br /> * @return<br /> */<br /> public static String prettyFormat(String input, int indent) {<br /> try {<br /> Source xmlInput = new StreamSource(new StringReader(input));<br /> StringWriter stringWriter = new StringWriter();<br /> StreamResult xmlOutput = new StreamResult(stringWriter);<br /> TransformerFactory transformerFactory = TransformerFactory<br /> .newInstance();<br /> transformerFactory.setAttribute("indent-number", indent);<br /> Transformer transformer = transformerFactory.newTransformer();<br /> transformer.setOutputProperty(OutputKeys.INDENT, "yes");<br /> transformer.transform(xmlInput, xmlOutput);<br /> return xmlOutput.getWriter().toString();<br /> } catch (Exception e) {<br /> throw new RuntimeException(e);<br /> }<br /> }</p><p> public static String toXml(String jsonString){<br /> try {<br /> JSONObject jsonObject = new JSONObject(jsonString);<br /> toXml(jsonObject);<br /> } catch (Exception e) {<br /> throw new RuntimeException(e);<br /> }</p><p> return result.toString();<br /> }</p><p> private static void toXml(JSONObject json) throws Exception {</p><p> Iterator<?> keyIter = json.keys();<br /> while (keyIter.hasNext()) {<br /> String key = (String) keyIter.next();<br /> Object jsonValue = json.get(key);<br /> if (jsonValue instanceof JSONArray) {<br /> JSONArray arrayValue = (JSONArray) jsonValue;<br /> for (int i = 0; i < arrayValue.length(); i++) {<br /> appendFlagBegin(key);<br /> Object arrItem = arrayValue.get(i);<br /> if (arrItem instanceof JSONObject) {<br /> toXml((JSONObject) arrItem);<br /> } else if (arrItem instanceof JSONArray) {<br /> String arrItemStr = "{" + key + ":"<br /> + ((JSONArray) arrItem).toString() + "}";<br /> toXml(new JSONObject(arrItemStr));<br /> } else {<br /> appendText(arrItem.toString());<br /> }<br /> appendFlagEnd(key);<br /> }<br /> } else {<br /> appendFlagBegin(key);<br /> if (jsonValue instanceof JSONObject) {<br /> toXml((JSONObject) jsonValue);<br /> } else {<br /> appendText(jsonValue.toString());<br /> }<br /> appendFlagEnd(key);<br /> }<br /> }<br /> }</p><p> private static String replaceSpecialChar(String s) {<br /> for (int i = 0; i < spacialChars.length; i++) {<br /> s = s.replaceAll(spacialChars[i], validChars[i]);<br /> }<br /> return s;<br /> }</p><p> private static void appendText(String s) {<br /> result.append(replaceSpecialChar(s));<br /> }</p><p> private static void appendFlagBegin(String str) {<br /> result.append("<" + str + ">");<br /> }</p><p> private static void appendFlagEnd(String str) {<br /> result.append("</" + str + ">");<br /> }</p><p>}</p><p>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.