Xml和Json之间相互转化知多少?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速度)。XML它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。作为开发中比较常用到的两种数据格式,他们之间的转换是怎样的呢,下面就是关于它们转化的工具类。

一: 本实例所需jar包

maven 中的依赖

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ezmorph</groupId>
            <artifactId>ezmorph</artifactId>
            <version>1.0.6</version>
        </dependency>
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.1.6</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk13</classifier>
        </dependency>
        <dependency>
            <groupId>xalan</groupId>
            <artifactId>xalan</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.9.1</version>
        </dependency>
        <dependency>
            <groupId>xom</groupId>
            <artifactId>xom</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.2</version>
        </dependency>

测试文件gao.json

[
  {
    "name": "司马长风",
    "age": "25",
    "add": "四方城",
    "gender": "男"
  },
  {
    "name": "上官燕",
    "age": "23",
    "add": "凤凰都",
    "gender": "女"
  },
  {
    "name": "皇甫仁和",
    "age": "26",
    "add": "四方城",
    "gender": "男"
  },
  {
    "name": "欧阳明日",
    "age": "24",
    "add": "飞鹰堡",
    "gender": "男"
  }
]

XmlJSONUtil.java类代码

package com.test.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;

/**
 * json xml 互转工具类
 * @author:yqgao
 * @date:2015-4-16 下午02:01:38
 */
public class XmlJSONUtil {
    private static XMLSerializer xmlserializer = new XMLSerializer();
    private static final String STR_JSON_OBJECT = "{"+
    "\"name\": \"小王\","+
    "\"age\": \"20\","+
    "\"add\": \"北京\","+
    "\"gender\": \"男\""+
    "}";
    private static final String STR_JSON_ARRAY = "[{"+
    "\"name\": \"小王\","+
    "\"age\": \"20\","+
    "\"add\": \"北京\","+
    "\"gender\": \"男\""+
    "},"+
    "{"+
    "\"name\": \"小李\","+
    "\"age\": \"21\","+
    "\"add\": \"上海\","+
    "\"gender\": \"女\""+
    "}]";
    /**
     * xml格式字符串转化成jsonObject或者jsonArray
     * @param xml
     * @return
     */
    public static String xml2json(String xml){
        String rs = "";
        try {
            rs = xmlserializer.read(xml).toString();
        } catch (Exception e) {
            //e.printStackTrace();
            System.err.println("xml转化为json异常...");
        }
        return rs;
    }

    /**
     * jsonArray或者jsonObject字符串转化为xml
     * @param json
     * @return
     */
    public static String json2xml(String json){
        String rs = "";
        try {
            if(json.contains("[")&&json.contains("]")){
                //jsonArray
                JSONArray jobj = JSONArray.fromObject(json);
                rs =  xmlserializer.write(jobj);
            }else{
                //jsonObject
                JSONObject jobj = JSONObject.fromObject(json);
                rs =  xmlserializer.write(jobj);
            }

        } catch (Exception e) {
            //e.printStackTrace();
            System.err.println("jsonArray转化为xml异常...");
        }
        return rs;
    }
   /***
    * json和xml文件互转
    * @param sourcePath json文件的路径
    * @param outPath xml文件的路径
    * @param enterFlag 转化标识 1表示json转化为xml
    * 2表示xml转化为json
    * @return
    */
    public static String jfxfTranspose(String sourcePath,String outPath,int enterFlag){
        FileInputStream in =null;
        BufferedReader br = null;
        FileWriter fw = null;
        String rs = null;
        try{
            File jsonFile = new File(sourcePath);
            in = new FileInputStream(jsonFile);
            StringBuffer sbuf = new StringBuffer();
            br = new BufferedReader(new InputStreamReader(in));
            String temp =null;

            while((temp=br.readLine())!=null){
                sbuf.append(temp);
            }
            if(1==enterFlag){
                rs  = json2xml(sbuf.toString());
            }else{
                rs  = xml2json(sbuf.toString());
            }
            File test = new File(outPath);
            if(!test.exists()){
                test.createNewFile();
            }
            fw = new FileWriter(test);
            fw.write(rs);
         }catch (Exception e) {
             System.err.println("json和xml转化文件异常...");
        }finally{
            try {
                fw.close();
                br.close();
                in.close();
            } catch (Exception e) {
                System.err.println("输入、输出流关闭异常");
                e.printStackTrace();
            }
        }
        return rs;
    }

    public static void main(String[] args) throws IOException {
//        String xml1 = json2xml(STR_JSON_OBJECT);
        String xml1 = json2xml(STR_JSON_ARRAY);
        System.out.println("xml ==>"+xml1);
        String json1 = xml2json(xml1);
        System.out.println("json==>"+json1);

        String spath2 = "F:/WorkSpace/JavaProject/src/com/test/util/gao.json";
        String opath2 = "F:/WorkSpace/JavaProject/src/com/test/util/testGao.xml";
        String rs2 =  jfxfTranspose(spath2,opath2,1);
        System.out.print(rs2);

        String spath1 = "F:/WorkSpace/JavaProject/src/com/test/util/testGao.xml";
        String opath1 = "F:/WorkSpace/JavaProject/src/com/test/util/test.json";
        String rs1 =  jfxfTranspose(spath1,opath1,2);
        System.out.print(rs1);

    }
}

以上代码中的路径,请以自己电脑路径为准。

运行代码后可以看到控制台的输出和项目目录下生成的文件如下

控制台

xml ==><?xml version="1.0" encoding="UTF-8"?>
<a><e class="object"><add type="string">北京</add><age type="string">20</age><gender type="string">男</gender><name type="string">小王</name></e><e class="object"><add type="string">上海</add><age type="string">21</age><gender type="string">女</gender><name type="string">小李</name></e></a>

2015-4-17 16:22:05 net.sf.json.xml.XMLSerializer getType
信息: Using default type string
json==>[{"add":"北京","age":"20","gender":"男","name":"小王"},{"add":"上海","age":"21","gender":"女","name":"小李"}]
<?xml version="1.0" encoding="UTF-8"?>
<a><e class="object"><add type="string">四方城</add><age type="string">25</age><gender type="string">男</gender><name type="string">司马长风</name></e><e class="object"><add type="string">凤凰都</add><age type="string">23</age><gender type="string">女</gender><name type="string">上官燕</name></e><e class="object"><add type="string">四方城</add><age type="string">26</age><gender type="string">男</gender><name type="string">皇甫仁和</name></e><e class="object"><add type="string">飞鹰堡</add><age type="string">24</age><gender type="string">男</gender><name type="string">欧阳明日</name></e></a>
2015-4-17 16:22:05 net.sf.json.xml.XMLSerializer getType
信息: Using default type string
[{"add":"四方城","age":"25","gender":"男","name":"司马长风"},{"add":"凤凰都","age":"23","gender":"女","name":"上官燕"},{"add":"四方城","age":"26","gender":"男","name":"皇甫仁和"},{"add":"飞鹰堡","age":"24","gender":"男","name":"欧阳明日"}]

生成的文件

testGao.xml

<?xml version="1.0" encoding="UTF-8"?>
<a>
    <e class="object">
        <add type="string">四方城</add>
        <age type="string">25</age>
        <gender type="string">男</gender>
        <name type="string">司马长风</name>
    </e>
    <e class="object">
        <add type="string">凤凰都</add>
        <age type="string">23</age>
        <gender type="string">女</gender>
        <name type="string">上官燕</name>
    </e>
    <e class="object">
        <add type="string">四方城</add>
        <age type="string">26</age>
        <gender type="string">男</gender>
        <name type="string">皇甫仁和</name>
    </e>
    <e class="object">
        <add type="string">飞鹰堡</add>
        <age type="string">24</age>
        <gender type="string">男</gender>
        <name type="string">欧阳明日</name>
    </e>
</a>

test.json

[
  {
    "add": "四方城",
    "age": "25",
    "gender": "男",
    "name": "司马长风"
  },
  {
    "add": "凤凰都",
    "age": "23",
    "gender": "女",
    "name": "上官燕"
  },
  {
    "add": "四方城",
    "age": "26",
    "gender": "男",
    "name": "皇甫仁和"
  },
  {
    "add": "飞鹰堡",
    "age": "24",
    "gender": "男",
    "name": "欧阳明日"
  }
]

以上就是xml和json相互转化的小尝试,完整项目代码链接:http://download.csdn.net/detail/gao36951/8604519

时间: 2024-10-13 09:53:27

Xml和Json之间相互转化知多少?的相关文章

XML与JSON的对比

XML与JSON的对比 1.各自定义 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交

实体类和JSON对象之间相互转化

. [代码]工具类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 package myUti

protobuf,json,xml,binary,Thrift之间的对比

http://blog.csdn.net/angus_17/article/details/8493448 binary 二进制,数据流,也可以转化成 1100011类似的 protobuf 是google的,二进制的数据传输协议,性能比 xml 和 json 号. 但 可读性 差 Thrift 是 FackBook的,性能 比 protobuf还好 一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,总体看来ProtoBuf

两种常用的数据交换格式:XML和JSON

不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated values)格式. 而在互联网上,传输数据往往有很多层次的结构,并非矩阵形态(m×n)那么简单.常见的有xml.json.yaml等等.其中,yaml是"yaml ain't markup language"的递归缩写,即各单词首字母组合恰为第一个词:而yaml也可理解成yet anothe

XML和JSON比较

目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生:相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你之前已经听说过,但对于XML和 JSON的不同之处可能会不怎么了解.对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的,虽然JSON才处于起步阶段,但我相信JSON最终会取代XML成为Ajax的首选,到时Ajax可能要更名为Ajaj(Asynchronous

XML与JSON

在我们做各个系统和各个服务端的数据交互的时候会遇到其中两种数据格式,那就是xml和json,下面来谈谈这两种数据模式. XML 什么是xml? XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分. 您可以创建内容,然后使用限定标记标记它,从而使每个单词.短语或块成为可识别.可分类的信息.您创建的文件,或文档实例 由元素(标记)和内容构成.元素的描述性越强,文档各部分越容易识别. 构建XML          1.XML

全面剖析XML和JSON

1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准.XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应用程序

XML,Object,Json转换之浅析Xstream的使用

XML,Object,Json转换之浅析Xstream的使用 请尊重他人的劳动成果,转载请注明出处:XML,Object,Json转换之浅析Xstream的使用 XStream的是一个简单的库,主要用于Java对象和XML之间的转换.但XStream也内置了对Json的支持. 1.Xstream的特点: 这里直接引用Xstream官方的叙述: 灵活易用:在更高的层次上提供了简单.灵活.易用的统一接口,用户无需了解项目的底层细节 无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操

iOS中XML、JSON数据结构解析以及第三方类的引用

今天讲到数据结构解析的内容:XML和JSON两种 XML数据结构:是扩展于HTML,主要使用标签对<start></start> 其解析有两种: 1.SAX解析(Simple API for XML).是基于事件驱动的解析方式,逐行解析数据(采用协议回调机制) NSXMLParser是iOS自带的XML解析类.解析过程由NSXMLParserDelegate协议方式回调 解析过程:开始标签-->取值-->结束标签-->取值 使用过程如下: @interface T