Java实现xml和json互转

        

          本节重点在于使用staxon实现xml和json直接互转,主流的转换工具还有json-lib、jackson、fastjson,实现json、javabean和xml互转。简单对比各种转换工具:

 

      (1)首先是json-lib,很早的转换工具,缺点多,依赖第三方多,效率低下,不建议使用;

              需要的依赖:json-lib、xom和xalan,可在https://mvnrepository.com/ 分别搜索进行下载(maven或gradle)。

      (2)其次是jackson,因为json-lib的缺点,便有了jackson,它比json-lib的转换效率高,依赖少;

              需要的依赖:jackson-databind和jackson-dataformat-xml,同样可搜索下载;另外基于jackson的工具有很多,可按照自己的实际需求下载对应依赖,下载方法如上。

       (3)最后是fastjson,jackson一直很主流,社区和文档支持很充足,但不够快,不够简洁,于是fastjson应运而生,在功能和支持方面虽不能和jackson媲美,但天下武功,唯快不破,这就决定了fastjson有了一定的市场。

              需要的依赖:fastjson,除了自身零依赖。

 

 

接下来开始本节重点,staxon主要用来实现json和xml直接互转,下面是实现代码(仅作为工具使用,并未深究):

 

1、首先,gradle导入依赖:

	// https://mvnrepository.com/artifact/de.odysseus.staxon/staxon
	compile group: 'de.odysseus.staxon', name: 'staxon', version: '1.3'

     或maven 导入依赖:



    de.odysseus.staxon
    staxon
    1.3

 

2、xml转json方法 和 json转xml方法:

public class DataFormatUtil {
    /**
     * @Description: xml convert to json
     * @author wangyan_z
     * @date 2019年7月10日 上午10:50:32
     */
    public static String XmlToJson(String xmlString){

        StringReader input = new StringReader(xmlString);
        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: json convert to xml
     * @author wangyan_z
     * @date 2019年7月10日 上午10:52:32
     */
    public static String JsonToXml(String jsonString){
        StringReader input = new StringReader(jsonString);
        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();
            }
        }
        // remove 
        if (output.toString().length() >= 38) {
            return output.toString().substring(39);
        }
        return output.toString();
    }
    /**
     * @Description: 去掉xml中的换行和空格
     * @author wangyan_z
     * @date 2019年7月11日 下午4:05:40
     */
    public static String JsonToXmlReplaceBlank(String jsonString) {
        String str = DataFormatUtil.JsonToXml(jsonString);
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
}

 

3、测试结果:

      用 swagger,即http://localhost:8080/swagger-ui.html 来测试后端接口,结果为:

//测试xml


0000101



QY201600006082
9542108405



//生成json,同时是测试json
{
	"root" : {
		"head" : {
			"OrgNum" : "0000101",
			"TermiId" : null
		},
		"body" : {
			"cust_id" : "QY201600006082",
			"cust_no" : 9542108405,
			"loan_mortgages" : null
		}
	}
}
//生成xml

	
		0000101
		
	
	
		QY201600006082
		9542108405
		
	

 

        over!!!

 

 

 

你可能感兴趣的:(json,xml,java)