XML和JSON的使用

1.简介

1.1xml简介

可扩展标记语言(eXtensible Markup Language)

特性:

  1. xml具有平台无关性, 是一门独立的标记语言.
  2. xml具有自我描述性

1.2JSON简介

JSON: (JavaScript Object Notation) JS对象简谱 , 是一种轻量级的数据交换格式.


2.二者的异同点

JSON 与 XML 的相同之处:

JSON 和 XML 数据都是 “自我描述” ,都易于理解。
JSON 和 XML 数据都是有层次的结构。
JSON 和 XML 数据可以被大多数编程语言使用。

JSON 与 XML 的不同之处:

JSON 不需要结束标签
JSON 更加简短
JSON 读写速度更快
JSON 可以使用数组


3.XML使用方法

3.1XML文档的编写

在使用XML之前先学会用文本文档编写。

首先需要创建一个文本文档,之后将后缀更改为xml模式,选择打开模式为记事本打开,即可直接编写内容。

编写格式
1.文档声明:编写版本,并且选择编码方案。

<?xml version = "1.0" encoding = "UTF-8"?>

2.内容编写:编写格式,语法。

开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称>

标记名称定义规则
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写

标记内容: 开始标记与结束标记之间 ,是标记的内容.

注意事项:
1.一个XML文档中, 必须有且仅允许有一个根标记.
2.标记可以嵌套, 但是不允许交叉.
反例:(age和name交叉在了一起,错误)

<person>
<name>李四<age></name>
18</age>
</person>

3.标记名称 允许重复
4.标记除了开始和结束 , 还有属性.
例:(这里book有了id这个属性)

 <book id="1001">
        <name>西游记</name>
        <info>打怪物</info>
 </book>

5.注释
注释不能写在文档文档声明前
注释不能嵌套注释
在这里插入图片描述

编写示例:

<?xml version = "1.0" encoding = "UTF-8"?>
<books>
    <book id="1001">
        <name>西游记</name>
        <info>打怪物</info>
    </book>
   <book id="1002">
        <name>西游记2</name>
        <info>打怪物2</info>
    </book>
</books>

3.2.解析电脑上的xml文件

也是需要一些jar包的,如果没有可以下方评论,我给你

public static void main(String[] args) throws FileNotFoundException, DocumentException {
        //获取文件输入流
        FileInputStream fis = new FileInputStream("E://图书.xml");
        //创建XML读取工具对象
        SAXReader sr = new SAXReader();
        //通过读取工具, 读取XML文档的输入流 , 并得到文档对象
        Document dc = sr.read(fis);
        //通过文档对象 , 获取文档的根节点对象
        Element e = dc.getRootElement();
        //输出根节点的名称
        System.out.println(e.getName());
        //将根节点的下一个节点存入List集合
        List<Element> list = e.elements();
        for(int i = 0;i<list.size();i++){
            Element book = list.get(i);
            System.out.println("编号:"+book.attributeValue("id"));
            System.out.println("name"+book.elementText("name"));
            System.out.println("info"+book.elementText("info"));
        }
    }

结果:在这里插入图片描述

3.3获取指定节点的内容

public static void main(String[] args) throws FileNotFoundException, DocumentException {
      //获取输入流
       FileInputStream fis = new FileInputStream("E:\\图书.xml");
       //读取工具
       SAXReader sr = new SAXReader();
       //读取并得到文档对象
       Document dc = sr.read(fis);
       //在这里指定节点,这个节点可以看上面的xml文档的编写实例一致
       Node n = dc.selectSingleNode("//book[@id = '1002']//name");
       //打印节点的名称和内容
       System.out.println(n.getName()+":"+n.getText());
       }

执行结果:
在这里插入图片描述

3.4java生成xml文件

 public static void main(String[] args) throws IOException {
        Document doc = DocumentHelper.createDocument();
        Element books = doc.addElement("books");
        for(int i= 0;i<10;i++){
            Element book = books.addElement("book");
            Element name = book.addElement("name");
            name.setText("迪迦奥特曼");
            Element info = book.addElement("info");
            info.setText("奥特曼打小怪兽");
            book.addAttribute("id",String.valueOf(100+i));
        }
        FileOutputStream fos = new FileOutputStream("books.xml");
        XMLWriter xw = new XMLWriter(fos);
        xw.write(doc);
        fos.close();
        System.out.println("ok");
    }

运行结果:(截取一部分)
在这里插入图片描述

3.5将对象写入XML

先声明一个对象

class Person{
        private String name;
        private int age;

        public Person() {
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }

然后将对象写入xml文档

Demo6.Person p = new Demo6.Person();
        p.setName("老白");
        p.setAge(60);
        XStream xs = new XStream();
        xs.alias("person",Demo6.Person.class);
        String xml = xs.toXML(p);
        System.out.println(xml);

结果:
在这里插入图片描述

4.JSON解析与生成

工具包可以直接搜Gson(方法1的jar包)或fastJSON(方法2)去官网下载
先声明一个对象类

public class Person {
    private String id;
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Person() {
    }

    public Person(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

4.1 对象转JSON

方式1:

public static void main(String[] args) {
        Person p = new Person("1","老王",38);
        String s = (new Gson()).toJson(p);
        System.out.println(s);
    }

方式2:

    public static void main(String[] args) {
        Person p = new Person("2","老王",35);
        String s = JSON.toJSONString(p);
        System.out.println(s);
    }

运行结果
在这里插入图片描述

4.2JSON转对象

方式1:

    public static void main(String[] args) {
        Person p = (new Gson()).fromJson("{\"id\":\"1\",\"name\":\"老王\",\"age\":38}",Person.class);
        //获取了名称
        System.out.println(p.getName());
    }

方式2:

    public static void main(String[] args) {
        Person p = JSON.parseObject("{\"age\":35,\"id\":\"2\",\"name\":\"老王\"}",Person.class);
        System.out.println(p.toString());
        System.out.println(p.getName());
    }

结果:
在这里插入图片描述

4.3JSON里存在数组,转换成对象

方式1:

    public static void main(String[] args) {
        HashMap map = new Gson().fromJson("{\"id\":\"1\",\"name\":[\"老王\",\"王叔叔\",\"小王\"],\"age\":38}",HashMap.class);
        List list = (List) map.get("name");
        System.out.println(list.get(2));
    }

结果:
在这里插入图片描述

方式2:

    public static void main(String[] args) {
        List list = JSON.parseArray("[\"哈哈哈哈哈\",\"嘿嘿嘿嘿嘿\",\"呵呵呵呵呵\"]",String.class);
        //获取下标为1的数据
        System.out.println(list.get(1));
    }

结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/apple_51491580/article/details/113576739
今日推荐