xml 以及JSON学习记录

XML 与 JSON 笔记

一、xml 部分

      1.xml  简介

         XML是Extensible Markup Language的缩写,即可扩展标记语言。它是一种具有平台无关性,自我描述性,用来创建的标记的标记语言。
xml 的应用途径一般有三种:

  • 网络数据传输
  • 数据存储
  • 配置文件(重点)

      2.xml  语法格式

1) XML文档声明

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

2)标记 ( 元素 / 标签 / 节点)
                  XML文档,由一个个的标记组成.

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

                  自定义名称,必须遵循以下命名规则:
                  1.名称可以含字母、数字以及其他的字符
                  2.名称不能以数字或者标点符号开始
                  3.名称不能以字符 “xml”(或者 XML、Xml)开始
                  4.名称不能包含空格,不能包含冒号(:)
                  5.名称区分大小写 标记内容: 开始标记与结束标记之间 ,是标记的内容. 例如 ,我们通过标记, 描述一个人名:
张三
3) 一个XML文档中, 必须有且且仅允许有一个根标记.
正例:

<names> 
      <name>张三</name>
       <name>李四</name>
        </names> 

反例:

	  <name>李四</name>
	  <name>麻子</name>

4)标记可以嵌套, 但是不允许交叉.
         正例:

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

         反例:

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

5)标记的层级称呼 (子标记, 父标记 , 兄弟标记, 后代标记 ,祖先标记)
        例如:

  <persons>
    <person> 
      <name>李四</name> 
      <length>180cm</length> 
    </person>
    <person> 
      <name>李四</name> 
      <length>200cm</length>
    </person> 
 </persons> 

        name是person的子标记.也是person的后代标记
        name是persons的后代标记.
        name是length的兄弟标记.
        person是name的父标记.
        persons是name的祖先标记.
6) 标记名称 允许重复

7)标记除了开始和结束 , 还有属性.

标记中的属性, 在标记开始时 描述, 由属性名和属性值 组成. 格式:在开始标记中, 描述属性. 可以包含0-n个属性, 每一个属性是一个键值对! 属性名不允许重复 , 键与值之间使用等号连接, 多个属性之间使用空格分割. 属性值 必须被引号引住.
案例:

<persons>
   <person id="10001" groupid="1">
      <name>李四</name>
      <age>18</age>
  </person>
  <person id="10002" groupid="1">
      <name>李四</name>
      <age>20</age>
  </person>
</persons>

      3.xml  解析

所需jar包:
在这里插入图片描述

代码:

public class Demo1 {
    /**
     * xml解析
     */
    public static void main(String[] args) throws IOException, DocumentException {
         //获取输入流  D:\data\IDEA\project_space\kkb\kkb-homework-05\src\Demo1.xml
        FileInputStream in=new FileInputStream("src\\Demo1.xml");
        //创建xml读取对象
        SAXReader sr=new SAXReader();
        //读取并得到文档对象
        Document doc = sr.read(in);
        //通过文档获取根元素
        Element rootElement = doc.getRootElement();
        //解析元素得到根元素
        System.out.println(rootElement.getName());//books
         //获取book元素
        Element book = rootElement.element("book");
        //获取为name标签的元素
        Element name = book.element("name");
        //获取元素内容
        System.out.println(name.getText());//金苹果

        //循环遍历
        //获取根元素的所有子元素
        List<Element> elements = rootElement.elements();
        for (int i = 0; i <2 ; i++) {
            Element element = elements.get(i);
            System.out.println(element.attributeValue("id"));
            System.out.println(element.elementText("name"));
            System.out.println(element.elementText("info"));
        }
        in.close();
    }
}

解析文件后控制台打印内容:
在这里插入图片描述

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>
</books>

      3.xml  使用XPATH快速解析

路径表达式:
通过路径快速的查找一个或一组元素 路径表达式:

  1. / : 从根节点开始查找
  2. // : 从发起查找的节点位置 查找后代节点 ***
  3. . : 查找当前节点
  4. … : 查找父节点
  5. @ : 选择属性. *
    属性使用方式:
    [@属性名=‘值’]
    [@属性名>‘值’]
    [@属性名<‘值’]
    [@属性名!=‘值’]

上节中可以使用xpath方式获取xml内容:

  /**
     * xml解析
     */
    public static void main(String[] args) throws IOException, DocumentException {
         //获取输入流  D:\data\IDEA\project_space\kkb\kkb-homework-05\src\Demo1.xml
        FileInputStream in=new FileInputStream("src\\Demo1.xml");
        //创建xml读取对象
        SAXReader sr=new SAXReader();
        //读取并得到文档对象
        Document doc = sr.read(in);
        Node node = doc.selectSingleNode("//name");//金苹果
        System.out.println(node.getText());
        in.close();
    }

二、 json部分

1)简介:

  • JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。
  • JSON是一种轻量级(Light-Meight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。
  • JSON 的名称中虽然带有JavaScript,但这是指其语法规则是参考JavaScript对象的,而不是指只能用于JavaScript 语言。
  • JSON无论对于人,还是对于机器来说,都是十分便于阅读和书写的,而且相比 XML(另一种常见的数据交换格式),文件更小,因此迅速成为网络上十分流行的交换格式。
  • 因为JSON本身就是参考JavaScript 对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同。

2)语法规则

  • 数组(Array)用方括号(“[]”)表示。
  • 对象(0bject)用大括号(“{}”)表示。
  • 名称/值对(name/value)组合成数组和对象。
  • 名称(name)置于双引号中,值(value)有字符串、数值、布尔值、null、对象和数组。
  • 并列的数据之间用逗号(“,”)分隔

3) 使用Gson和FastJSON解析
需要jar包
在这里插入图片描述

  • 使用Gson解析
    代码示例:
    对象转JSON格式:
public class Demo1 {
    /**
     * json解析--1.使用JSON解析对象
     * @param args
     */
    public static void main(String[] args) {
        //1.创建Gson对象
        Gson gson=new Gson();
        //对象转换成JSON格式
        Book b=new Book(1,"西游记","孙悟空三打白骨精");
        String s = gson.toJson(b);
        System.out.println(s);
    }
}

在这里插入图片描述
JSON转对象:

public class Demo2 {
    public static void main(String[] args) {
        //1.创建Gson对象
        Gson gson=new Gson();
        //{"id":,"name":"西游记","info":"孙悟空三大白骨精"}
        Book book=gson.fromJson("{\"id\":\"15\",\"name\":\"西游记\",\"info\":\"孙悟空三大白骨精\"}",Book.class);
        System.out.println(book);

        //需要转转的内容包含数组形式,会转换成list
        //{"id":"1","name":"西游记","info":"孙悟空三大白骨精","page":["唐僧","沙和尚","猪八戒"]}
        HashMap map=gson.fromJson("{\"id\":\"1\",\"name\":\"西游记\",\"info\":\"孙悟空三大白骨精\",\"page\":[\"唐僧\",\"沙和尚\",\"猪八戒\"]}", HashMap.class);
        System.out.println(map);
    }
}

在这里插入图片描述

  • 使用Fast解析:
    代码示例:
    对象转JSON格式:
public class Demo3 {
    /**
     * json解析--2.使用fastJSON
     * 对象转JSON格式
     * @param args
     */
    public static void main(String[] args) {
        Book book = new Book(2, "水浒传", "108好汉");
        String s = JSON.toJSONString(book);
        System.out.println(s);
    }
}

在这里插入图片描述
JSON转对象:

public class Demo4 {
    /**
     * json解析--2.使用fastJSON
     * JSON格式转对象
     * @param args
     */
    public static void main(String[] args) {
        //{"id":"1","name":"西游记","info":"孙悟空三大白骨精"}
        Book book = JSON.parseObject("{\"id\":\"1\",\"name\":\"西游记\",\"info\":\"孙悟空三大白骨精\"}",Book.class);
        System.out.println(book);

        //JSON格式转数组
        //["张三","李四","王五"]
        List<String> strings = JSON.parseArray("[\"张三\",\"李四\",\"王五\"]", String.class);
        System.out.println(strings.get(0));
    }
}

在这里插入图片描述
滴滴滴滴滴滴滴滴滴~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值