JavaWeb-01XML和JSON

一、XML

1.XML简介

XML(可扩展标记语言)是一种标记语言,用于描述、存储和交换数据。它采用了类似于HTML的标记结构,但是更为通用和灵活。XML的基本构成包括标签、元素、属性和文本内容。

2.XML的主要用途

  1. 数据交换:XML被广泛用于不同系统之间的数据交换。通过将数据结构化为XML格式,可以方便地在不同系统之间进行数据传输和共享,而无需考虑它们的底层实现或编程语言。

  2. 配置文件:许多软件和应用程序使用XML格式来存储配置信息。XML的结构化特性使得配置文件易于阅读、编辑和维护。

  3. 数据存储:某些应用程序使用XML来存储数据,尤其是对于具有复杂结构或需要与其他系统交互的数据。

  4. Web服务:XML作为一种通用的数据格式,常用于Web服务之间的通信。通过使用XML作为数据传输的格式,不同的Web服务可以轻松地交换信息,实现系统之间的集成和互操作。

  5. 文档描述:XML可以用于创建结构化文档,例如标准化的文档类型定义(DTD)或XML模式(XML Schema)。这些文档描述文件的结构和内容约束,使得可以对数据进行验证和验证。

3.XML语法

XML(可扩展标记语言)的语法由标签、元素、属性和文本组成。以下是XML的基本语法:

  1. 标签(Tags)

    • XML文档由标签组成,标签用于标识数据的开始和结束。
    • 标签可以是成对的,也可以是自闭合的。
    • 开始标签和结束标签由尖括号 <> 包围,如 <tag></tag>
  2. 元素(Elements)

    • 在开始标签和结束标签之间的部分称为元素。
    • 元素可以包含其他元素、文本或者属性。
  3. 属性(Attributes)

    • 属性提供了关于元素的额外信息。
    • 属性位于开始标签内,以名称-值对的形式表示。
    • 属性以空格分隔,例如 <element attribute="value">
  4. 文本内容(Text Content)

    • 在开始标签和结束标签之间的部分称为文本内容。
    • 文本内容可以包含任意文本数据。
  5. 注释(Comments)

    • 注释用于在XML文档中添加注释信息,不会被解析器处理。
    • 注释以 <!-- 开始,以 --> 结束。
  6. CDATA节(CDATA Sections)

    • CDATA节用于将文本块标记为不应由XML解析器解释的原始字符数据。
    • CDATA节以 <![CDATA[ 开始,以 ]]> 结束。
  7. 处理指令(Processing Instructions)

    • 处理指令用于向XML解析器提供处理信息,通常位于文档的开头。
    • 处理指令以 <? 开始,以 ?> 结束。

以下是一个简单的XML示例,展示了这些基本语法的应用:

<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a sample XML document -->
<bookstore>
  <book category="Fiction">
    <title lang="en">Harry Potter</title>
    <author>J.K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="Non-Fiction">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

在这个示例中,<bookstore><book><title>等都是元素,categorylang等是属性,文本内容包含在 <title><author><year><price> 元素中。

4.使用Dom4j解析XML

DOM4J是一个流行的Java库,用于解析和操作XML文档。以下是一个示例代码,演示如何使用DOM4J解析XML文档并输出其中的书籍信息:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class XMLParser {
    public static void main(String[] args) {
        SAXReader reader = new SAXReader();
        try {
            // 读取XML文件
            Document document = reader.read("books.xml");
            
            // 获取根元素
            Element root = document.getRootElement();
            
            // 获取所有书籍元素
            List<Element> bookElements = root.elements("book");
            
            // 遍历每本书
            for (Element bookElement : bookElements) {
                System.out.println("Book ID: " + bookElement.attributeValue("id"));
                System.out.println("Title: " + bookElement.elementText("title"));
                System.out.println("Author: " + bookElement.elementText("author"));
                System.out.println("Genre: " + bookElement.elementText("genre"));
                System.out.println("Price: " + bookElement.elementText("price"));
                System.out.println("Publish Date: " + bookElement.elementText("publish_date"));
                System.out.println();
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}

二、JSON

1.JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在网络中传输数据。它基于JavaScript语言的语法,但是它是一种独立于编程语言的格式,因此可以被多种编程语言解析和生成。JSON采用了类似于对象和数组的结构,具有易读性和易于理解的特点。

JSON的基本数据类型包括:

  1. 对象(Object):一组无序的键值对,使用大括号 {} 包围,键值对之间用逗号 , 分隔,键和值之间使用冒号 : 分隔。键必须是字符串,值可以是任何JSON数据类型。

    {"name": "John", "age": 30, "city": "New York"}
    
  2. 数组(Array):一组有序的值,使用方括号 [] 包围,数组元素之间用逗号 , 分隔。数组可以包含任何JSON数据类型。

    ["apple", "banana", "orange"]
    
  3. 字符串(String):由双引号 " 包围的文本。

    "Hello, world!"
    
  4. 数值(Number):整数或浮点数。

    42
    
  5. 布尔值(Boolean):表示真或假的值。

    true
    
  6. 空值(Null):表示空值或缺失值。

    null
    

JSON可以用于在不同系统之间传输和存储数据,例如在Web应用程序和服务器之间进行数据交换,或者在客户端和服务端之间进行API通信。JSON的简洁性、易读性和易于解析的特点使得它成为了一种流行的数据交换格式。

2.JSON用途

  1. 数据交换:JSON是一种轻量级、易于解析的数据格式,常用于在不同系统之间进行数据交换。Web应用程序和服务器之间的API通信、移动应用程序和后端服务之间的数据传输等场景都经常使用JSON作为数据交换格式。

  2. 配置文件:JSON格式的配置文件易于阅读和编写,因此常用于配置应用程序的设置、参数、选项等。许多软件和服务都使用JSON格式的配置文件来管理其行为和功能。

  3. 数据存储:JSON数据可以存储在各种数据库系统中,例如NoSQL数据库(如MongoDB)和关系型数据库(如PostgreSQL、MySQL等)。JSON的灵活性和结构化特性使其适合存储和管理各种类型的数据。

  4. Web服务:JSON常用于Web服务之间的数据交互。许多现代的Web应用程序使用JSON作为数据传输格式,通过AJAX技术将数据发送到服务器并接收响应,从而实现动态更新和交互性。

  5. 配置API响应:许多Web服务和API都使用JSON格式来响应请求。通过使用JSON作为API响应的格式,可以提供结构化的数据,使客户端应用程序能够轻松地解析和处理响应数据。

  6. 日志记录:JSON格式的日志记录易于分析和处理,因此在应用程序和系统中常用于记录事件、错误、警告等信息。JSON日志可以帮助开发人员和系统管理员了解系统的运行状况,并进行故障排除和性能优化。

3.JSON的语法

JSON(JavaScript Object Notation)的语法相对简单,它由键值对、数组、对象、字符串、数字、布尔值和null值等基本构建块组成。以下是JSON的语法规则:

  1. 对象(Object):对象是一组无序的键值对,使用大括号 {} 包围,键值对之间用逗号 , 分隔。

    {"key1": "value1", "key2": "value2", "key3": "value3"}
    
  2. 数组(Array):数组是一组有序的值,使用方括号 [] 包围,数组元素之间用逗号 , 分隔。

    ["value1", "value2", "value3"]
    
  3. 键值对(Key-Value Pair):键值对由键和值组成,键必须是一个字符串,值可以是任何JSON数据类型。键和值之间用冒号 : 分隔。

    "key": "value"
    
  4. 字符串(String):字符串由双引号 " 包围的文本。

    "Hello, world!"
    
  5. 数字(Number):数字可以是整数或浮点数。

    42
    
  6. 布尔值(Boolean):布尔值表示真或假。

    true
    
  7. null值(Null):表示空值或缺失值。

    null
    
  8. 注释:JSON不支持注释,不能在JSON数据中添加注释。

在JSON中,对象和数组可以嵌套使用,形成复杂的数据结构。例如,对象可以作为值出现在另一个对象中,或者数组可以包含其他数组作为元素。JSON的灵活性和简洁性使得它成为一种流行的数据交换格式。

{
  "company": "ABC Corporation",
  "location": "New York",
  "employees": [
    {
      "id": 101,
      "name": "John Doe",
      "department": "Engineering",
      "position": "Software Engineer",
      "salary": 80000
    },
    {
      "id": 102,
      "name": "Jane Smith",
      "department": "Marketing",
      "position": "Marketing Manager",
      "salary": 90000
    },
    {
      "id": 103,
      "name": "Alice Johnson",
      "department": "Human Resources",
      "position": "HR Specialist",
      "salary": 75000
    }
  ],
  "projects": [
    {
      "name": "Project A",
      "description": "Developing new software product",
      "team": ["John Doe", "Alice Johnson"]
    },
    {
      "name": "Project B",
      "description": "Marketing campaign for new product launch",
      "team": ["Jane Smith"]
    }
  ]
}

4.使用Fastjson解析json

Fastjson 是阿里巴巴开源的 Java 库,用于处理 JSON 数据。以下是使用 Fastjson 解析 JSON 的示例代码:

首先,确保在项目中引入 Fastjson 库。如果使用 Maven 管理项目,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.80</version>
</dependency>

然后,使用以下示例代码解析 JSON:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class JsonParser {
    public static void main(String[] args) {
        // JSON字符串
        String jsonString = "{\"name\": \"John\", \"age\": 30}";

        // 使用Fastjson解析JSON字符串为JSONObject对象
        JSONObject jsonObject = JSON.parseObject(jsonString);

        // 输出JSONObject中的数据
        System.out.println("Name: " + jsonObject.getString("name"));
        System.out.println("Age: " + jsonObject.getInteger("age"));
    }
}

在这个示例中,我们使用 JSON.parseObject() 方法将 JSON 字符串解析为 Fastjson 的 JSONObject 对象。然后,可以通过 getString()getInteger() 等方法从 JSONObject 中获取相应的值。

另外,如果你希望将 JSON 字符串解析为自定义的 Java 对象,你可以使用 JSON.parseObject() 方法,并传入相应的 Java 类作为第二个参数,示例如下:

import com.alibaba.fastjson.JSON;

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

    // Getter 和 Setter 方法

    public static void main(String[] args) {
        // JSON字符串
        String jsonString = "{\"name\": \"John\", \"age\": 30}";

        // 使用Fastjson解析JSON字符串为Person对象
        Person person = JSON.parseObject(jsonString, Person.class);

        // 输出Person对象的属性值
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
    }
}

这样,JSON 字符串就会被解析为 Person 对象,可以直接访问其属性值。

5.使用Gson解析json

  1. pom.xml中添加Gson依赖
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.8</version>
</dependency>
  1. 创建Java类以解析JSON数据

JSON字符串如下:

{
  "name": "John",
  "age": 30,
  "city": "New York"
}

创建一个Java类来表示这个JSON对象:

import com.google.gson.Gson;

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

    // Getters and setters

    public static void main(String[] args) {
        String json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";

        // 解析JSON
        Gson gson = new Gson();
        Person person = gson.fromJson(json, Person.class);

        // 输出解析结果
        System.out.println("Name: " + person.getName());
        System.out.println("Age: " + person.getAge());
        System.out.println("City: " + person.getCity());
    }
}

在上面的例子中,我们使用了fromJson()方法将JSON字符串转换成Java对象。然后我们可以访问这个Java对象的属性。

6.使用Jackson解析json

pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version> <!-- 根据需要选择最新版本 -->
</dependency>

以下是一个简单的示例,演示如何使用Jackson来解析JSON字符串:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParserExample {
    public static void main(String[] args) {
        // JSON字符串
        String json = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";

        // 创建ObjectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();

        try {
            // 解析JSON字符串为Java对象
            Person person = objectMapper.readValue(json, Person.class);

            // 打印解析后的Java对象
            System.out.println("Name: " + person.getName());
            System.out.println("Age: " + person.getAge());
            System.out.println("City: " + person.getCity());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Person {
    private String name;
    private int age;
    private String city;

    // Getter和Setter方法
    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;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
}
  • 34
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[猫玖]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值