zoukankan      html  css  js  c++  java
  • 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);
    	}
    	
    	
    }
    

      

  • 相关阅读:
    头文件stdio与stdlib.h的区别
    宝塔利用git+ webhooks 实现git更新远程同步Linux服务器
    Linux源码安装步骤
    Promise.all和Promise.race区别,和使用场景
    vue显示富文本
    Js实现将html页面或div生成图片
    JS
    关于Swiper和vue数据顺序加载问题处理
    php 数据库备份(可用作定时任务)
    js async await 终极异步解决方案
  • 原文地址:https://www.cnblogs.com/nihaorz/p/5845599.html
Copyright © 2011-2022 走看看