JAVA-JSON验辞、XML互轉-【粗暴應用分享】

其實很多時候稿黄,我們只需要魚,而不是漁跌造,吶杆怕,給你魚。


在平時的開發(fā)中壳贪,有時候會用到JSON和XML的互轉

  • net.sf.json-lib.json-lib包提供一些互轉的方法;
  • com.alibaba.fastjson并沒有提供陵珍;

但是現(xiàn)在用FastJSON的人越來越多,好多人在面臨到JSON到XML互轉的時候還是有些束手無策违施,現(xiàn)在寫一個特別好用的工具類互纯,分享給大家,一如既往的粗暴磕蒲,好用留潦。

1、首先辣往,推薦你用maven兔院,然后不用多講

<!-- https://mvnrepository.com/artifact/de.odysseus.staxon/staxon -->
        <dependency>
            <groupId>de.odysseus.staxon</groupId>
            <artifactId>staxon</artifactId>
            <version>1.3</version>
        </dependency>

這個復制粘貼丟到pom.xml文件里面,然后開始直接丟代碼:

/**
 * @ClassName StaxonUtils
 * @Description 實現(xiàn)JSON--XML互轉
 * @author watermelon_code
 * @Date 2017年7月19日 上午10:49:48
 * @version 1.0.0
 */
public class StaxonUtils {

    /**
     * @Description: json string convert to xml string
     * @author watermelon_code
     * @date 2017年7月19日 上午10:50:32
     */
    public static String json2xml(String json) {
        StringReader input = new StringReader(json);
        StringWriter output = new StringWriter();
        JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).repairingNamespaces(false).build();
        try {
            XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input);
            XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);
            writer = new PrettyXMLEventWriter(writer);
            writer.add(reader);
            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return output.toString();
    }

    /**
     * @Description: json string convert to xml string ewidepay ues only
     * @author watermelon_code
     * @date 2017年7月19日 上午10:50:32
     */
    public static String json2xmlPay(String json) {
        StringReader input = new StringReader(json);
        StringWriter output = new StringWriter();
        JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).repairingNamespaces(false).build();
        try {
            XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input);
            XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);
            writer = new PrettyXMLEventWriter(writer);
            writer.add(reader);
            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (output.toString().length() >= 38) {// remove <?xml version="1.0" encoding="UTF-8"?>
            return "<xml>" + output.toString().substring(39) + "</xml>";
        }
        return output.toString();
    }

    /**
     * @Description: xml string convert to json string
     * @author watermelon_code
     * @date 2017年7月19日 上午10:50:46
     */
    public static String xml2json(String xml) {
        StringReader input = new StringReader(xml);
        StringWriter output = new StringWriter();
        JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true).autoPrimitive(true).prettyPrint(true).build();
        try {
            XMLEventReader reader = XMLInputFactory.newInstance().createXMLEventReader(input);
            XMLEventWriter writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output);
            writer.add(reader);
            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                output.close();
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return output.toString();
    }

    /**
     * @Description: 去掉轉換xml之后的換行和空格
     * @author watermelon_code
     * @date 2017年8月9日 下午4:05:44
     */
    public static String json2xmlReplaceBlank(String json) {
        String str = StaxonUtils.json2xml(json);
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }

}

看效果吧:

public static void main(String[] args) {
        JSONObject json = new JSONObject();
        json.put("name", "jack");
        json.put("age", 25);

        String xmlstr = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[thisisatest]]></Content><MsgId>1234567890123456</MsgId></xml>";

        System.out.println("JSON-->XML:");
        System.out.println("JSON:" + json.toJSONString());
        System.out.println("---------------------------------------------------------------");
        System.out.println("普通轉XML帶格式:\n" + StaxonUtils.json2xml(json.toJSONString()));
        System.out.println("---------------------------------------------------------------");
        System.out.println("轉XML去掉頭部站削、前后補充<XML>:\n" + StaxonUtils.json2xmlPay(json.toJSONString()));
        System.out.println("---------------------------------------------------------------");
        System.out.println("普通轉XML去掉空格換行:\n" + StaxonUtils.json2xmlReplaceBlank(json.toJSONString()));
        System.out.println("---------------------------------------------------------------");
        System.out.println("XML轉JSON:\n" + StaxonUtils.xml2json(xmlstr));
    }

運行結果:

JSON-->XML:
JSON:{"name":"jack","age":25}
---------------------------------------------------------------
普通轉XML帶格式:
<?xml version="1.0" encoding="UTF-8"?>
<name>jack</name>
<age>25</age>

---------------------------------------------------------------
轉XML去掉頭部坊萝、前后補充<XML>:
<xml><name>jack</name>
<age>25</age>
</xml>
---------------------------------------------------------------
普通轉XML去掉空格換行:
<?xmlversion="1.0"encoding="UTF-8"?><name>jack</name><age>25</age>
---------------------------------------------------------------
XML轉JSON:
{
    "xml" : {
        "ToUserName" : "toUser",
        "FromUserName" : "fromUser",
        "CreateTime" : 1348831860,
        "MsgType" : "text",
        "Content" : "thisisatest",
        "MsgId" : 1234567890123456
    }
}

那么這次的輪子到這里就結束了。

TO BE CONTINUE !

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末许起,一起剝皮案震驚了整個濱河市十偶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌街氢,老刑警劉巖扯键,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異珊肃,居然都是意外死亡荣刑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門伦乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厉亏,“玉大人,你說我怎么就攤上這事烈和“唬” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵招刹,是天一觀的道長恬试。 經(jīng)常有香客問我窝趣,道長,這世上最難降的妖魔是什么训柴? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任哑舒,我火速辦了婚禮,結果婚禮上幻馁,老公的妹妹穿的比我還像新娘洗鸵。我一直安慰自己,他們只是感情好仗嗦,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布膘滨。 她就那樣靜靜地躺著,像睡著了一般稀拐。 火紅的嫁衣襯著肌膚如雪火邓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天德撬,我揣著相機與錄音贡翘,去河邊找鬼。 笑死砰逻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的泛鸟。 我是一名探鬼主播蝠咆,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼北滥!你這毒婦竟也來了刚操?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤再芋,失蹤者是張志新(化名)和其女友劉穎菊霜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體济赎,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡鉴逞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了司训。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片构捡。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壳猜,靈堂內(nèi)的尸體忽然破棺而出勾徽,到底是詐尸還是另有隱情,我是刑警寧澤统扳,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布喘帚,位于F島的核電站畅姊,受9級特大地震影響,放射性物質發(fā)生泄漏吹由。R本人自食惡果不足惜若未,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溉知。 院中可真熱鬧陨瘩,春花似錦、人聲如沸级乍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玫荣。三九已至甚淡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捅厂,已是汗流浹背贯卦。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焙贷,地道東北人撵割。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像辙芍,于是被迫代替她去往敵國和親啡彬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,282評論 25 707
  • 溫馨提示:本文閱讀需要3分鐘故硅,建議收藏后閱讀庶灿! 上次我們介紹了XML 今天我們來介紹 JSON 什么是JSON? ...
    Java聯(lián)盟閱讀 534評論 0 1
  • 查找目錄:find /(查找范圍) -name '查找關鍵字' -type d查找文件:find /(查找范圍) ...
    fumier閱讀 61,103評論 0 8
  • 喜歡畫畫但全是憑興趣沒受過什么專業(yè)訓練往踢,說白了還不是因為沒錢哈哈,不過索性我喜歡聽著歌畫畫來打發(fā)無聊的時間徘层,雖然畫...
    就是喜歡我自己閱讀 434評論 1 1
  • 七律/風信子 作者:心博峻呕、圖片:網(wǎng)絡 豐滿根成大蒜頭,葉莖蔥綠碧油油惑灵。 花開攏抱春天綻山上,果獲團圓夏季收。 美麗端莊...
    心博1閱讀 678評論 0 0