json和xml互转(用json-lib+dom4j方法)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:51   2358   0

json-lib是通过XMLSerializer的read和write方法进行xml的读取和json的写;xml转json时如果是元素的属性,会在json里的key前加一个@标识

1. 首先准备好jar包,以下是pom文件:

<!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib -->
  <dependency>
   <groupId>net.sf.json-lib</groupId>
   <artifactId>json-lib</artifactId>
   <version>2.4</version>
   <classifier>jdk15</classifier>
  </dependency>


  <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
  <dependency>
   <groupId>dom4j</groupId>
   <artifactId>dom4j</artifactId>
   <version>1.6.1</version>
  </dependency>

  <!-- https://mvnrepository.com/artifact/xom/xom -->
  <dependency>
   <groupId>xom</groupId>
   <artifactId>xom</artifactId>
   <version>1.2.5</version>
  </dependency>

2.java代码演示:


package com.lrq.demo;

import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
import org.dom4j.*;


public class TestJson2Xml {
    public static void main(String[] args) throws DocumentException {
        String str = "{\"CargosubmatterList\":{\"Cargosubmatter\":[{\"itemkindcode\":\"005\",\"itemCode\":\"9996\",\"itemname\":\"特约标的\",\"itemddetail\":\"特约标的\",\"rate\":\"10.00\",\"currency\":\"CNY\",\"exchangerate\":\"1.00\",\"shortrateflag\":\"1\",\"shortrate\":\"100.00\",\"calamount\":\"1\",\"mainitem\":\"1\",\"itemkindname\":\"国内公路货物运输定额保险(B款)\",\"itemkindno\":\"1\",\"itemno\":\"1\",\"chgamount\":\"0.00\",\"chgpremium\":\"0.00\"},{\"itemkindcode\":\"006\",\"itemCode\":\"9996\",\"itemname\":\"特约标的\",\"itemddetail\":\"特约标的\",\"rate\":\"0.85\",\"currency\":\"CNY\",\"exchangerate\":\"1.00\",\"shortrateflag\":\"1\",\"shortrate\":\"100.00\",\"calamount\":\"1\",\"mainitem\":\"0\",\"itemkindname\":\"附加第三者责任保险\",\"itemkindno\":\"2\",\"itemno\":\"1\",\"chgamount\":\"0.00\",\"chgpremium\":\"0.00\"}]},\"PlusInfo\":{\"liabilitystartdate\":\"本保单保险责任起期详见保单条款约定\",\"shadowagentcode\":\"M00000003878\",\"shadowagentname\":\"广东广福宏宇保险经纪有限公司福建分公司\",\"shadowagenttype\":\"2102\"}}";
        JSONObject json = JSONObject.fromObject(str);
        String result = json2Xml(json,"xml");
       /* String str1 = result.replace("<e>","   ");
        String str2 = str1.replace("</e>","   ");*/
        System.out.println("json转xml:"+result);
        JSONObject xmlJson =  xml2Json(result);
        System.out.println("xml转json:"+xmlJson);
    }

    public static String json2Xml(JSONObject json, String rootName) throws DocumentException {
        String sXml = "";
        XMLSerializer xmlSerializer = new XMLSerializer();
        xmlSerializer.setTypeHintsEnabled(false);
        xmlSerializer.setRootName(rootName);
        String sContent = xmlSerializer.write(json,"utf-8");
        try {
            Document docCon = DocumentHelper.parseText(sContent);
            sXml = docCon.getRootElement().asXML();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return sXml;
    }

    public static JSONObject xml2Json(String xml){
        XMLSerializer xmlSerializer = new XMLSerializer();
        //将xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识)
        String  json =  xmlSerializer.read(xml).toString();
       return JSONObject.fromObject(json);
    }

}


3. 控制台输出

如果是jsonArray会在前面加<e>标签,但是解析的时候依然正常









分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

似水如云一梦身,不知此外更何亲。个中不许容他物,分付黄梅路上人。

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP