JAVA——json与xml如何互转为Java对象

目录

一、Java中有4种XML解析方式 及优缺点 

1. SAX解析

2. DOM解析

3. JDOM解析

*4. DOM4J解析(多数使用)

二、xml与json的demo

1. demo.xml

2. dome.json

三、JAVA对象与XML/JSON互转代码

1. Java对象转化成xml

2. xml转换成Java对象

3.谷歌的json转Java对象

4.谷歌的Java对象转json

5.阿里的json转Java对象

6.阿里的Java对象转json


一、Java中有4种XML解析方式 及优缺点 

1. SAX解析

解析方式是事件驱动机制 !
SAX 解析器 , 逐行读取XML文件 解析 , 每当解析到一个标签的开始 / 结束 / 内容 / 属性时 , 触发事件( 只读 )。
 
优点:
分析能够立即开始,不需要等待所有的数据被处理 逐行加载, 节省内存 有助于解析大于系统内存的文档 有时不必解析整个文档, 它可以在某个条件得到满足时停止解析。
缺点:
1. 单向解析,无法定位文档层次,无法同时访问同一文档的不同部分数据 ( 因为逐 行解析, 当解析第 n 行是 , n-1 行已经被释放了 , 无法在进行操作了 )。
2. 无法得知事件发生时元素的层次 , 只能自己维护节点的父 / 子关系。
3. 只读解析方式 , 无法修改XML 文档的内容。
 

2. DOM解析

是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准,分析该结构通常 需要加载整个 文档和内存中建立文档树模型 程序员可以通过操作文档树 , 来完成( 读、写
 
优点:
文档在内存中加载 , 可修改数据 .。访问是双向的,可以在任何时候在树中双向解析数据。
缺点:
文档全部加载在内存 消耗资源大
 

3. JDOM解析

目的是成为 Java 特定文档模型,它简化与 XML 的交互并且比使用 DOM 实现更快。由于是第一 个Java 特定模型, JDOM 一直得到大力推广和促进。JDOM文档声明其目的是 使用 20% (或更少)的精力解决 80% (或更多) Java/XML 问题 ” (根据学习曲线假定为20%
 
优点:
使用具体类而不是接口,简化了 DOM API 。 大量使用了Java 集合类,方便了 Java 开发人员。
缺点 :
没有较好的灵活性。 性能不是那么优异。
 

*4. DOM4J解析(多数使用)

它是 JDOM 的一种智能分支。它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,DOM4J是一个非常优秀的 Java XML API ,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java 软件都在使用 DOM4J 来读写 XML 。目前许多开源项目中大量采用DOM4J , 例如 :Hibernate
 
DOM4J-XPATH解析XML
路径表达式 :
1. / : 从根节点开始查找
2. // : 从发起查找的节点位置 查找后代节点 ***
3. . : 查找当前节点
4. .. : 查找父节点
5. @ : 选择属性 . *
属性使用方式 :
[@属性名 =' ']
[@ 属性名 >' ']
[@ 属性名 <' ']
[@ 属性名 !=' ']
例如books: 路径: //book[@id='1001']//name
 

二、xml与json的demo

1. demo.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="1001">
		<name>金苹果</name>
		<info>锄禾日当午,苹果很辛苦</info>
	</book>
	<book id="1002">
		<name>银苹果</name>
		<info>锄禾日当午,苹果很辛苦</info>
	</book>
	<fei id="100">
		<name>111</name>
		<info>锄禾日当午,苹果很辛苦</info>
	</fei>>
</books>

2. dome.json

{
    "name": "已成为",
    "age": 18,
    "pengyou": [
        "张三",
        "李四",
        "王二",
        "麻子",
        {
            "name": "野马",
            "info": "像匹野马一样狂奔在技术钻研的道路上"
        }
    ],
    "heihei": {
        "name": "大长刀",
        "length": "40m"
    }
}

三、JAVA对象与XML/JSON互转代码

 

1. Java对象转化成xml

private static void creatXMLByObject() {
        Person p = new Person();
        p.setName("张三");
        p.setAge(26);
        XStream xStream = new XStream();
        xStream.alias("person", Person.class);
        String xml = xStream.toXML(p);
        System.out.println(xml);
    }

2. xml转换成Java对象

private static void creatXML() throws IOException {
        //通过DocumentHelper,创建空的文档
        Document doc = DocumentHelper.createDocument();
        //添加的第一个元素就是根节点
        Element root = doc.addElement("books");
        //通过根节点丰富子节点
        for (int i = 0; i < 50; i++) {
            Element e = root.addElement("book");
            e.addAttribute("id",1+i+"");
            Element name = e.addElement("name");
            Element info = e.addElement("info");
            name.setText("苹果" + (i+1));
            info.setText("种了第" + (i+1) + "个苹果");
        }

        //创建文件流对象
        FileOutputStream fos = new FileOutputStream("E:\\InterllJ2020\\workspace\\kaikeba\\data\\creatDemo.xml");
        //将文件流对象传给XML,转成xml对象
        XMLWriter xw = new XMLWriter(fos);
        xw.write(doc);
        xw.close();
    }

3.谷歌的json转Java对象

private static void gJsonToObject() {
        //创建gson对象
        Gson gson = new Gson();
        //创建json字符串
        String s = "{\"id\":1001,\"name\":\"金色气球\",\"info\":\"气球真好看\"}";
        //转换
        Book book = gson.fromJson(s, Book.class);
        System.out.println(book.toString());
    }

4.谷歌的Java对象转json

private static void gObjectToSson() {
        //创建json对象
        Gson gson = new Gson();
        //创建book对象
        Book book = new Book(1001,"金色气球","气球真好看");
        //转换
        String s = gson.toJson(book);
        System.out.println(s);
    }

5.阿里的json转Java对象

private static void aliJsonToObject() {
        //报错
        /*String json = "\"id\":1002,\"info\":\"气球真好玩!\",\"name\":\"金色气球\"";
        Book book = JSON.parseObject(json,Book.class);
        System.out.println(book.toString());*/

        //["yiersan","一二三","123"]
        List<String> s = JSON.parseArray("[\"yiersan\",\"一二三\",\"123\"]", String.class);
        for (String string: s) {
            System.out.println(string);
        }
    }

6.阿里的Java对象转json

private static void aliObjectToJson() {
        //创建book对象
        Book book = new Book(1002,"金色气球","气球真好玩!");
        String json = JSON.toJSONString(book);
        System.out.println(json);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值