• staxon实现json和xml互转


    pom.xml:

    <dependency>
        <groupId>de.odysseus.staxon</groupId>
        <artifactId>staxon</artifactId>
        <version>1.3</version>
    </dependency>
    

    转换工具类:

    package com.nihaorz.utils;
    
    import java.io.IOException;
    import java.io.StringReader;
    import java.io.StringWriter;
    
    import javax.xml.stream.XMLEventReader;
    import javax.xml.stream.XMLEventWriter;
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLOutputFactory;
    
    import de.odysseus.staxon.json.JsonXMLConfig;
    import de.odysseus.staxon.json.JsonXMLConfigBuilder;
    import de.odysseus.staxon.json.JsonXMLInputFactory;
    import de.odysseus.staxon.json.JsonXMLOutputFactory;
    import de.odysseus.staxon.xml.util.PrettyXMLEventWriter;
    
    public class StaxonUtils {
    	/**
    	 * json string convert to xml string
    	 */
    	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();
    			}
    		}
    		if (output.toString().length() >= 38) {
    			// remove <?xml version="1.0" encoding="UTF-8"?>
    			return output.toString().substring(39);
    		}
    		return output.toString();
    	}
    
    	/**
    	 * xml string convert to json string
    	 */
    	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();
    	}
    }
    

    测试代码:

    package com.nihaorz.xmltojson;
    
    import org.junit.Test;
    
    import com.nihaorz.utils.StaxonUtils;
    
    public class UtilsTest {
    	
    	@Test
    	public void test_xmltojson(){
    		String xml = "<goods><name type="book" prices="100">钢铁是怎样炼成的</name><name1 type='book' prices='100'>钢铁是怎样炼成的</name1><name type='book' prices='100'>钢铁是怎样炼成的</name></goods>";
    		System.out.println(xml);
    		String json = StaxonUtils.xml2json(xml);  
            System.out.println(json);
    	}
    	
    	@Test
    	public void test_jsontoxml(){
    		String json = "{"goods":{"name":{"@prices":100,"@type":"book","$":"钢铁是怎样炼成的"},"name1":{"@prices":"100","@type":"book","$":"钢铁是怎样炼成的"},"name":{"@prices":"100","@type":"book","$":"钢铁是怎样炼成的"}}}";
    		System.out.println(json);
    		String xml = StaxonUtils.json2xml(json);
    		System.out.println(xml);
    	}
    	
    	
    }
    

      

  • 相关阅读:
    textarea中的空格与换行
    js判断微信内置浏览器
    关于express4不再支持body-parser
    html5 geolocation API
    屏幕密度与分辨率
    nodebeginer
    手机浏览器下IScroll中click事件
    iphone手机上的click和touch
    AngularJS学习笔记一
    不用bootstrap实现居中适应
  • 原文地址:https://www.cnblogs.com/nihaorz/p/5845599.html
Copyright © 2020-2023  润新知