xml和json讲解-12月2日讲课内容

2020-12-02T19:48:00

XML

概述

Extensible Markup Language
可拓展标记语言,是由W3C万维网联盟指定的规范

用途:
    1. 数据存储,小型数据库,存在一定的CRUD操作可行性
    2. 网络端数据的传输
    3. 常见配置文件【重要】

【注意】后期大部分配置文件都是XML格式,数据传输不用XML,使用JSON

XML 和 HTML 之间的差异

XML 不是 HTML 的替代。

XML 和 HTML 为不同的目的而设计:

  • XML 被设计用来传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。

HTML 旨在显示信息,而 XML 旨在传输信息。

XML 中的标签可自定义

基本语法【重点】

1. XML文件后缀名是.xml
2. XML第一行是对于当前文件的定义声明
3. XML文件中有且只有一个根标签
4. 属性值必须使用引号包含,这里推荐使用双引号
5. 标签必须正确匹配,正确开始和关闭
6. XML标签内严格区分大小写

案例代码

<!--XML声明,版本号加编码集-->
<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student id = "1">
        <name>赵四</name>
        <age>18</age>
        <gender>男</gender>
    </student>
    <student id = "2">
        <name>刘能</name>
        <age>19</age>
        <gender>男</gender>
    </student>
    <student id = "3">
        <name>玉田</name>
        <age>20</age>
        <gender>男</gender>
    </student>
</students>

XML 文件约束【了解】

  1. DTD
    一种简单的约束方式

但是存在一定的约束问题

  1. Schema
    一种复杂XML文件约束方式

非常严谨

XML 实体引用【重点】

且, 对应&

&amp;

XML 解析【了解】

概述

XML的解析方式分为四种:

1、DOM解析;

2、SAX解析;

3、JDOM解析;

4、DOM4J解析。

其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。这里只说一下最常用并且性能最好的 [Dom4j]() 解析

DOM4J解析

特点

1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。

2、它使用接口和抽象基本类方法。

3、具有性能优异、灵活性好、功能强大和极端易用的特点。

4、是一个开放源码的文件,被很多优秀的开源框架所使用

jar 包
dom4j-1.6.1.jar
核心API
// 核心类 SAXReader
class SAXReader {}

// 获取Document对象
Document read(File file);

// 获取指定节点的节点类对象
Element element();

// 获取指定节点所有的节点对象,返回的是一个list
List elements();

// 获取节点名
String getName();

// 获取节点对应的数据
String getText();

案例代码

public class Demo {
    public static void main(String[] args) throws DocumentException {
        // 获取SAXReader对象
        SAXReader reader = new SAXReader();

        // 获取对应的Document对象
        Document document = reader.read(new File("./XML/src/Student.xml"));

        // 获取跟节点对象
        Element rootElement = document.getRootElement();

        // 获取根节点对象的节点名并展示
        System.out.println(rootElement.getName());

        // 获取根节点下的所有子节点对应的List集合
        List<Element> elements = rootElement.elements();

        // 遍历获取所有的子节点
        for (Element element : elements) {
            // 展示子节点的节点名以及id属性所对应的值
            System.out.println(element.getName() + ":" + element.attribute("id").getValue());

            // 获取更深一层的子节点
            List<Element> list = element.elements();

            // 遍历获取所有的子节点
            for (Element element1 : list) {
                // 拿到子节点的节点名以及对应的数据
                System.out.println(element1.getName() + ":" + element1.getText());
            }
        }
    }
}

JSON

概述

JavaScript Object Notation
(JavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯

特点

1、存储和交换文本信息的语法,类似XML

2、轻量级(小、快)

3、可读性强(容易解析)

案例代码

{
    "firstName": "John",
    "lastName": "Smith",
    "sex": "male",
    "age": 25,
    "married": false,
    "address": 
    {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": 
    [
        {
          "type": "home",
          "number": "212 555-1234"
        },
        {
          "type": "fax",
          "number": "646 555-4567"
        }
    ]
}

JSON 语法

JSON 的语法基本上可以视为 JavaScript 语法的一个子集,包括以下内容:

  • 数据使用键/值对表示。建议键使用引号引起来!
  • 键/值对使用 ,(逗号)分割。
  • 使用大括号保存对象,每个名称后面跟着一个 ':'(冒号)
  • 使用方括号保存数组,数组值使用 ,(逗号)分割。

案例代码

{
    "book": [
        {
            "id":"01",
            "language": "Java",
            "edition": "third",
            "author": "Herbert Schildt"
        },
        {
            "id":"07",
            "language": "C++",
            "edition": "second"
            "author": "E.Balagurusamy"
    }]
}

JSON 支持以下两种数据结构:

  • 键/值对集合: 这一数据结构由不同的编程语言支持。
  • 有序的值列表: 包括数组,列表,向量或序列等等。

数据格式

JSON 值

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 对象(花括号里)
  • 数组(中括号里)
  • null

数字、字符串、逻辑值

案例代码

{
    "name": "buffer",
    age: 16,
    'gender': true
}

对象

JSON 对象在花括号中书写:

对象可以包含多个键/值对

案例代码

{
    "id":001, 
    "name":"张三", 
    "age":18
}

数组

案例代码

{
    name : ["张三", '李四', '王五'],
    age : ["1", '2', 3],
    info : ['帅']
}

对象数组

  1. 数据使用[]包含
  2. 在[]都是JSON格式对象
  3. 每一个对象之间使用逗号隔开,同时最后一个元素不需要逗号

案例代码1

{
    person1: [
        {
            "name": "张三"
        }, 
        {
            "age": 1
        }, 
        {
            "gender": true
        }
    ],
    person1: [
        {
            "name": "李四"
        }, 
        {
            "age": 2
        }, 
        {
            "gender": true
        }
    ],
    person1: [
        {
            "name": "翠花"
        }, 
        {
            "age": 3
        }, 
        {
            "gender": false
        }
    ]
}

案例代码2

{
    "person1": [
        {
            "name": "张三",
            "age": 13,
            "gender": true
        }
    ],
    "person2": [
        {
            "name": "李四",
            "age": 15,
            "gender": true
        }
    ],
    "person3": [
        {
            "name": "翠花",
            "age": 19,
            "gender": false
        }
    ]
}

JSON数据获取

1、json对象.键名

2、json对象["键名"]

3、数组对象[下标] -》 对应数组

案例代码一

var person = {"name":"张三"};

var name = person.name;
            
alert(name);

案例代码二

var person = {"name":"张三"};

var name = person["name"];

alert(name);

案例代码三

var persons = {"person" : ["张三", 16, false]};

var name = persons.person[0];

alert(name);

案例代码四

var persons = {
    "person": [{
        "name": "张三"
    }, {
        "age": 16
    }, {
        "gender": false
    }]
};

var name = persons.person[0]["name"];
var age = persons.person[1].age;

alert(name + age);

案例代码五

var person = {
    "name": "玉田",
    "age": 21
};

for (var key in person) {
    alert(key + ":" + person[key]);
}

案例代码六

var persons = [{
    "name": "老七",
    "age": 47,
    "gender": true
}, {
    "name": "永强",
    "age": 23,
    "gender": true
}, {
    "name": "刘英",
    "age": 20,
    "gender": false
}];

for (var i = 0; i < persons.length; i++) {
    var person = persons[i];

    for (var key in person) {
        alert(key + ":" + person[key]);
    }
}
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »