文章目录
- 前言
- 一、XML与JSON是什么?
- 1.XML
- 特性:
- 作用:
- XML的语法格式
- 2.JSON
- JSON的语法格式:
- 二. JSON解析
- 1.Gson
- a.将对象转换为JSON字符串
- b.将JSON字符串转换为对象
- 2.Fastjson
- a.将对象转换为JSON字符串
- b.将JSON字符串转换为对象
- 三.Jar包引入指导
- 四.Jar包下载链接
- 总结
前言
本文主要介绍JSON的作用,和在解析时的使用方法。
末尾附有工具下载链接哦,不可错过!
一、XML与JSON是什么?
JSON与XML 语言一样,都是供 不同语言编写的软件之间交流 的语言。
计算机编程已有半个多世纪的历史,被广泛使用的编程语言不下数十种,被发明的更是数不胜数。而不同语言编写的软件之间不可避免会产生数据交流,所以,就有了XML,JSON等标记语言的诞生。
随着时代的进步,JSON逐渐取代XML,被更广泛的应用,但XML并没有退出历史舞台,依旧在一些领域发挥着不可替代的作用。
1.XML
简要介绍一下XML语言。
可扩展标记语言(eXtensible Markup Language)。
特性:
- xml具有平台无关性, 是一门独立的标记语言.
- xml具有自我描述性(简单来说,随便看它一眼,就知道它是个什么东西,不用细细研究,它所包含的信息都净收眼底)
作用:
- 网络数据传输.
- 数据存储
- 配置文件
XML的语法格式
1. XML文档声明
<?xml version="1.0" encoding="UTF-8"?>
2. 标记 ( 元素 / 标签 / 节点)
XML文档,由一个个的标记组成.
语法:
开始标记(开放标记): <标记名称>
结束标记(闭合标记): </标记名称>
标记名称: 自定义名称,必须遵循以下命名规则:
1.名称可以含字母、数字以及其他的字符
2.名称不能以数字或者标点符号开始
3.名称不能以字符 “xml”(或者 XML、Xml)开始
4.名称不能包含空格,不能包含冒号(:)
5.名称区分大小写
标记内容: 开始标记与结束标记之间 ,是标记的内容.
例如 ,我们通过标记, 描述一个人名:
<name>唐纳德 普普子</name>
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>
8. 注释
注释不能写在文档文档声明前
注释不能嵌套注释
格式:
注释开始: <!--
注释结束: -->
2.JSON
JSON: (JavaScript Object Notation) 是一种轻量级的数据交换格式.
一个要传输的对象, 由一个大括号表示.
括号中 描述对象的属性 . 通过键值对来描述对象的属性
(可以理解为, 大括号中, 包含的是一个个的键值对.)
JSON的语法格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
键值对的值, 可以是JS中的任意类型的数据:
- 数字(整数或浮点数)
- 逻辑值(true 或 false)
- 字符串(在双引号中)
- 数组(在方括号中)
- 函数
- 对象(在大括号中)
- null
以下,同一个对象(一本书 书名name 简介info)
的多种类型表达对比
//java:
class Book{
private String name;
private String info;
get/set...等方法
}
Book b = new Book();
b.setName(“《三体》”);
b.setInfo(“一曲文明的悲歌。”);
//js:
var b = new Object();
b.name = "《三体》";
b.info = "一曲文明的悲歌。";
XML:
<book>
<name>《三体》</name>
<info>一曲文明的悲歌。</info>
</book>
JSON:
{
"name":"《三体》",
"info":"一曲文明的悲歌。"
}
复杂一点的:
{
"name":"唐纳德·特朗普",
"nickname":"普普子",
"nickname":"大统领",
"hobit":["喝可乐","退群","向人们传授知识",{
"name":"和希拉里亲切交谈",
"info":"bitch!"
}]
}
二. JSON解析
对象与JSON字符串之间的转换。
当前较常见的JSON解析方式有两种:
- Gson(由谷歌公司提供),
- FastJson(由阿里提供)。
详细Jar包引入见 三。
1.Gson
新建一个Book类,
//属性如下:
private String id;
private String name;
private String info;
//再构建Set/Get方法,toString,equals,无参/全参方法等
//快捷键(右键 Generate)
a.将对象转换为JSON字符串
格式:
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
package com.hahaha.demo2;
import com.google.gson.Gson;
/**
* Created by alone on 2021/6/8.
*/
public class Demo1 {
public static void main(String[] args) {
/*//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
Book b = new Book("100","《三体》","一曲文明的悲歌");
String s = g.toJson(b);
System.out.println(s);*/
//1. 创建Gson对象
//2. 转换
Book b = new Book("100","《三体》","一曲文明的悲歌");
String s = new Gson().toJson(b);
System.out.println(s);
}
}
如图:
b.将JSON字符串转换为对象
格式:
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
package com.hahaha.demo2;
import com.google.gson.Gson;
/**
* Created by alone on 2021/6/8.
*/
public class Demo2 {
public static void main(String[] args) {
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换 : {"id":"100","name":"《三体》","info":"一曲文明的悲歌"}
Book b = g.fromJson("{\"id\":\"100\",\"name\":\"《三体》\",\"info\":\"一曲文明的悲歌\"}", Book.class);
System.out.println(b.getId());
//直接打印 b ,得到Json键值对,与a相同
}
}
如图:
2.Fastjson
a.将对象转换为JSON字符串
格式:
- 引入JAR包
- 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
package com.hahaha.demo2;
import com.alibaba.fastjson.JSON;
/**
* Created by alone on 2021/6/8.
*/
public class Demo3 {
public static void main(String[] args) {
Book book = new Book("1002","唐诗三百首","床前明月光,地上鞋三双。床上我杰哥,喊十块钱一双。"); //杰哥是我老师,人帅又多金。家住东京市,总是喊热,要回来。
//1. 转换
String json = JSON.toJSONString(book);
System.out.println(json);
}
}
b.将JSON字符串转换为对象
格式:
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
package com.hahaha.demo2;
import com.alibaba.fastjson.JSON;
/**
* Created by alone on 2021/6/8.
*/
public class Demo4 {
public static void main(String[] args) {
//1. 转换 : {"id":"1002","info":"床前明月光,地上鞋一堆。床上我杰哥,喊十块钱一双。","name":"唐诗三百首"}
Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"床前明月光,地上鞋三双。床上我杰哥,喊十块钱一双。\",\"name\":\"唐诗三百首\"}", Book.class);
System.out.println(book.getId());
}
}
效果同。
三.Jar包引入指导
在项目下新建 lib 文件夹,将两个Jar包直接粘贴进去
引入
过程未有详尽之处还请包含,可搜索详尽图示资料。
四.Jar包下载链接
链接:https://pan.baidu.com/s/1VXhGtpzcFIAgAPcQXyf4MA
提取码:RNM4
复制这段内容后打开百度网盘手机App,操作更方便哦
总结
不总结了,打球去了。