基于Java语言来了解XML和JSON
1、基于Java语言了解XML
1.1、了解XML的简介
XML是可扩展标记语言(eXtensible Markup Language)的简称,该语言在早期被设计出来的初衷是:让数据的存储、传输和交换更统一化和简便化。因此XML所具有的特性便是:(1)平台无关性,是一门独立的标记语言:这个特性可以理解成不管你是用Windows操作系统还是IOS操作系统去使用,也不管你是用Java语言还是其他语言去使用,它都长这样,因为它具有自己独立的语法。(2)具有自我描述性:这个特性可以让使用者很直观的了解使用XML编写的数据文件里的内容,该特性也是依赖于它的语法(标记+内容)。
对于Java语言这一方面来说,XML在早期的作用可以说非常的大:(1)可以进行网络数据的传输;(2)进行数据存储;(3)进行配置文件的编写。但是在JSON兴起后,前两个实现的作用都被取代了,对于如今的Java编程来说,XML更多的是应用于编写配置文件。
XML编写的数据可以用(*.XML)文件去存储,当然XML数据也是可以依托其他方式存在的,比如:在内存中构建XML数据,所以不要讲XML语言狭隘的理解为XML文件。
1.2、掌握XML的语法格式
每种语言想要去使用它,首先得了解这门语言的语法,你不了解语法根本就不能去用这种语言进行沟通,就比如:你不懂英文,你能用中文和不懂中文的老外聊天吗,那显然是不能的。所以了解并掌握语法是学习语言必备的前提。接下来我就来讲讲XML的语法格式吧。
1.2.1、XML文档声明格式
你所编写的XML数据大多数都会存在于XML文档中,而在编写XML文档需要进行文档声明:声明是由 "<?"、" ?>"这一对符号和该对符号所框住的内容构成,首先编写的是:xml,用来声明这是XML文件。声明下一个一个属性代表的是XML的版本号,最后一个属性指的是文件识别的字符编码(随意选择),千万要注意:该声明的中的 "?" 是一对的,不要少写了。声明格式如下:
<?xml version="1.0" encoding="UTF-8"?>
1.2.2、XML中的标记的格式
XML文档中,是由一个个标记(也还可以被称为:元素 / 标签 / 节点)组成的,标记的格式是由开始标记(开放标记)和结束标记(闭合标记)组成,开始标记和结束标记的写法如下:
开始标记: <标记名称>
结束标记:</标记名称>
1.2.3、标记在XML文档中的书写规则
标记在XML文档中需要注意的书写规则有:
1、标记的名称的自定义要遵循以下几点原则:1、名称可以含字母、数字以及其他字符;2、名称不能以数字或标点符号开头;3、名称不能以”XML、xml、Xml“开头;4、名称不能包含空格和冒号( :);5、名称区分大小写。
在开始标记和结束标记之间的就是标记的内容,就比如用XML来描述一本书:
<?xml version="1.0" encoding="UTF-8"?>
<Book>
<name>三国演义</name>
<info>该书是中国的四大名著之一</info>
</Book>
这一段标记语言代表的就是一本书名为:三国演义,简介为:该书是中国的四大名著之一。是不是很明了简洁,这就体现了XML语言的自我描述性的特征了。
2、每个XML文档,有且只允许有一个根节点,但在根节点中可以嵌套多个节点,就像我上面展示的XML代码,就只有一个根节点(Book),但根节点之间可以嵌套多个节点(name 和 info);
3、节点之间可以嵌套,但不可以交叉,节点交叉的效果(不允许书写,切记):
<?xml version="1.0" encoding="UTF-8"?>
<Book>
<name>三国演义<info></name>
该书是中国的四大名著之一</info>
</Book>
4、标记名称可以重复(但根节点有且只能有一个,切记),效果如下:
<?xml version="1.0" encoding="UTF-8"?>
<Books>
<book>
<name>三国演义</name>
<info>该书是中国的四大名著之一</info>
</book>
<book>
<name>水浒传</name>
<info>该书是中国的四大名著之一</info>
</book>
</Books>
5、标记除了名称外,还可以有属性,属性写在开始标记的名称(记得名称之后要加空格)之后,有多个属性的情况下,用空格隔开每个属性,属性由属性名和属性值组成。属性可要遵循以下原则:1、同一个标记中的属性名不可以重复;2、属性名与属性值之间用等号相连;3、属性值必须用引号引住。格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<Books>
<book id="1">
<name>三国演义</name>
<info>该书是中国的四大名著之一</info>
</book>
<book id="2">
<name>水浒传</name>
<info>该书是中国的四大名著之一</info>
</book>
</Books>
1.2.4、标记之间的层级称呼
标记之间的层级称呼有:父标记-子标记;祖先标记-后代标记;兄弟标记。拿上面的演示来说明:Books标记和book标记就是父标记-子标记的关系:Books标记是父标记,book标记是子标记;Books标记、name标记和info标记就是祖先标记-后代标记的关系:Books标记是先祖标记,name标记和info标记是后代标记;而name标记和info标记就是兄弟标记的关系。
1.2.5、注释的格式
有代码的地方肯定少不了注释,毕竟不是人人都懂你写的代码是啥意思,注释就能让别人更好的去阅读你的代码。而XML也有自己的注释格式和规则,规则就是:1、注释不可以写在声明的前面;2、注释不可以进行嵌套。格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--这是注释:下面描述了一本书-->
<Book>
<name>三国演义</name>
<info>该书是中国的四大名著之一</info>
</Book>
1.3、了解CDATA
CDATA是不应该由XML解析器解析的文本数据,是为了解决像 ”<“ 和 ”&“字符的解析问题,因为 ”<“ 在XML中会被解释为新元素的开始;”&“ 在XML中会被解释为字符实体的开始。然而在某些文本中,如JavaScript代码,就会含有大量的 ”<“,”&“ 字符,为避免出现编译错误,可以将脚本代码定义为CDATA,原因是因为CDATA中的内容会被解析器忽略。CDATA的格式:
<?xml version="1.0" encoding="UTF-8"?>
<Book>
<name>三国演义</name>
<!--CDATA格式如下:-->
<info><![CDATA[<该书是中国的四大名著之一>]]></info>
<!-- 出现错误识别的对比:-->
<info><该书是中国的四大名著之一></info>
</Book>
由演示就可以很清楚的看出:info标记的内容由一对尖括号引住,在没有加CDATA的情况下是会被识别成标记的(颜色为红色),加了CDATA的情况就不会被识别成标记(颜色为灰色)。
1.4、了解和掌握Java解析XML文件
如果有一个XML文件需要你用Java语言编写程序将其中的数据解析出来,那么你需要了解并掌握Java解析XML的方式,解析方式有以下四种:SAX解析方式(了解)、DOM解析方式(了解)、JDOM解析方式(了解)、DOM4J解析方式(掌握)
1.4.1、了解SAX解析
SAX解析的解析方式是:事件驱动机制,意思是:在SAX解析器逐行进行XML文件解析时,每当解析器读取到标记的开始、结束、内容或属性就会触发一个事件,我们可以编写程序在这些事件发生时,进行相应的处理。
使用该解析方式的优点:
- 解析能立即开始,无需等加载所有内容
- 逐行加载,有利于节省内存,方便解析大于系统内存的文件
- 在满足条件时会停止解析,不用解析整个文档
使用该解析方式的缺点:
- 单向解析,不能往回解析
- 因为是逐行解析,所以也不能同时解析不同行的内容
- 无法得知元素的层次,只能自己维护节点的父/子关系
- 这是只读解析,不能更改XML文档内容
1.4.2、了解DOM解析
该解析方式是用与平台和语言无关的方式来表示XML文档的官方w3c标准,该解析方式的机制是:需要加载整个文档然后在内存中建立文档数模型。之后便可以通过操作文档树,来完成数据的读取、修改、删除等。
使用该解析方式的优点:
- 文档在内存中加载,可以对数据作出更改
- 解析是双向的,因此可以随时在任何内容处解析数据
使用该解析方式的缺点(该缺点几乎忽略不计,大多数XML文档所占内存并不大):
- 文档全部加载在内存中,资源消耗大
1.4.3、了解JDOM解析
JDOM解析时基于DOM解析优化而来的解析方式:目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快。由于是第一 个Java特定模型,JDOM一直得到大力推广和促进。
使用该解析方式的优点:
- 使用具体的类,简化了DOM解析的API
- 大量使用Java的集合,方便数据的读取和修改
使用该解析方式的缺点:
- 没有较好的灵活性
- 性能不是很优异
1.4.4、掌握DOM4J解析
1.4.4.1、DOM4J解析的介绍
该解析是JDOM解析的一种智能分支,它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理,它还提供了构建文档表示的选项。
该解析方式的优点就是继承了JDOM解析的优点并解决了JDOM解析的缺点,具体表现为:
- 性能优异
- 功能强大
- 使用极其容易
1.4.4.2、使用DOM4J解析本地XML文件的步奏
- 在IDEA中导入Jar文件:dom4j.jar
- 创建一个指向XML文件的输入流对象fis
FileInputStream fis = new FileInputStream("XML文件的地址(相对地址或绝对地址都可以)");
- 创建一个XML读取工具对象sr
SAXReader sr = new SAXReader();
- 使用读取工具的对象sr调用read方法并传入输入流对象fis,之后得到一个文档对象doc
Document doc = sr.read(fis);
- 通过文档对象doc可以调用getRootElement方法获取根节点元素对象root,也可以调用addElement方法更改根节点的名称并获得更改后的根节点元素root
Element root = doc.getRootElement(); //获取根节点元素对象
Element root = doc.addElement(String name); //更改根节点名称
- 接下来便可以用root元素对象调用如下的方法操作数据
//这些方法只要是Element类的对象就额可以调用
String name = root.getName(); //获取根节点的名称
String text = root.getText(); //获取根节点的内容
String text = root.setText(); //设置根节点的内容
Element e = root.element(String name); //获取根节点中第一个子节点名为:name的子节点元素对象
List<Element> list =root.elements(); //获取根节点的所有子节点元素对象,并转成List集合
String value = root.attributeValue(String name); //获取根节点中属性名为:name的属性值
String text = root.elementText(String name); //获取根节点中的一个子节点名为:name的内容
Element e = root.addElement(String name); //给根节点添加一个子节点名为:name的子节点
root.addAttribute(String name,String value); //给根节点设置一个属性名为:name;属性值为:value的属性
1.4.4.3、本地XML文件解析的代码和效果图
本地的XML文件代码:
<?xml version="1.0" encoding="UTF-8"?>
<Books>
<book id="1">
<name>三国演义</name>
<info>该书是中国的四大名著之一</info>
</book>
<book id="2">
<name>水浒传</name>
<info>该书是中国的四大名著之一</info>
</book>
</Books>
以下是解析本地XML文件的Java代码:
public class Text {
public static void main(String[] args) throws IOException, DocumentException {
/*XML文件的地址可以是绝对地址(c://Book.xml,XML文件在C盘下),
也可以是相对地址(我的就是,在工程根目录下),但是文件一定要存在*/
FileInputStream fis = new FileInputStream("Book.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(fis);
Element root = doc.getRootElement();
System.out.println("根节点名称为:"+root.getName());
List<Element> list = root.elements();
for (Element e:list ) {
String id = e.attributeValue("id");
String name = e.elementText("name");
String info = e.elementText("info");
System.out.println("书本id为:"+id+",书名为:"+name+",简介为:"+info);
System.out.println("--------------");
}
fis.close();
}
}
以下是效果图:
1.4.4.4、使用DOM4J解析网络XML文件的步奏
- 在IDEA中导入Jar文件:dom4j.jar
- 创建一个URL对象url,写入连接的网址
//该网址是可以获得XML文件资源的,不然没效果
URL url = new URL("具体的网址");
- 创建URLConnection对象con,进行网络连接
URLConnection con = url.openConnection();
- 获取网络资源的输入流
InputStream is = con.getInputStream();
- 创建一个XML读取工具对象sr
SAXReader sr = new SAXReader();
- 使用读取工具的对象sr调用read方法并传入输入流对象fis,之后得到一个文档对象doc
Document doc = sr.read(fis);
之后的步奏就和解析本地XML文件的步骤一致。
1.4.4.5、网络XML文件解析的代码和效果图
接下来演示通过访问聚合数据网站来获取电话号码相关的数据XML文件,然后通过XML文件解析,来获取该电话号码的归属地、归属地邮政编码和运营商。
访问聚合数据来获取电话号码相干关数据的XML文件的网址为:
“http://apis.juhe.cn/mobile/get?phone=14715046330&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253”
我随便选了一个号码来获取的XML文件,忘号主勿怪罪,XML文件内容如下:
以下是解析网络XML文件的java代码:
public class Test1 {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "14715046330";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+
"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
Element root = doc.getRootElement();
//获取回应码:回应码为200表示该手机号存在
String code = root.elementText("resultcode");
if("200".equals(code)){
Element result = root.element("result");
String province = result.elementText("province");
String city = result.elementText("city");
String zip = result.elementText("zip");
String company = result.elementText("company");
if(province.equals(city)){
//当province的值等于city时,说明该地是直辖市
System.out.println("该电话号码的归属地为:"+city+"市," +
"归属地的邮政编码为:"+zip+",运行商为:"+company);
}else {
System.out.println("该电话号码的归属地为:"+province+"省,"+city+"市," +
"归属地的邮政编码为:"+zip+",运行商为:"+company);
}
}else {
System.out.println("请输入正确的电话号码!");
}
}
is.close();
}
以下是效果图:
1.4.4.6、使用XPATH来解析XML文件
1.4.4.6.1、XPATH简介
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
1.4.4.6.2、XPATH语法
XPATH解析XML文件是通过路径快速的查找一个或一组元素,所以就要了解路径表达式该如何编写,以下是路径表达式的符号所代表的含义:
1、 / :单斜杠表示从根节点开始查找
2、 // :双斜杠表示从发起查找的节点位置 查找后代节点
3、 . :一个点表示查找当前节点
4、 ..:两个点表示查找父节点
5、 @ :@表示选择属性,
@的使用方式:[@属性名=‘值’]、[@属性名>‘值’]、[@属性名<‘值’]、[@属性名!=‘值’]
1.4.4.6.3、使用XPATH解析本地XML文件的步骤
了解完路径表达式,下面来了解XPATH解析XML文件的步骤:
- 在IDEA中导入Jar文件:jaxen-1.1-beta-7.jar
- 创建一个指向XML文件的输入流对象fis
FileInputStream fis = new FileInputStream("XML文件的地址(相对地址或绝对地址都可以)");
- 创建一个XML读取工具对象sr
SAXReader sr = new SAXReader();
- 使用读取工具的对象sr调用read方法并传入输入流对象fis,之后得到一个文档对象doc
Document doc = sr.read(fis);
- 通过文档对象doc调用以下两个方法来获取节点对象或节点对象的集合
//获取一个指定的节点对象
Element e = doc.selectSingleNode("路径表达式");
//获取指定的节点的List集合对象
List<Element> list = doc.selectNodes("路径表达式");
/*Node类是Element类的父类,所以也可以写成下面这样*/
//获取一个指定的节点对象
Node n = doc.selectSingleNode("路径表达式");
//获取指定的节点的List集合对象
List<Node> list = doc.selectNodes("路径表达式");
- 之后节点对象调用方法来操作数据,方法和上面所介绍的DOM4J的解析方法是一样的
1.4.4.6.4、XPATH解析本地XML文件的代码和效果图
以下是解析本地XML文件的java代码:
public class Test2 {
public static void main(String[] args) throws IOException, DocumentException {
FileInputStream fis = new FileInputStream("Book.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(fis);
List<Element> name = doc.selectNodes("//name");
for (Node n:name ) {
System.out.println("书名为:"+n.getText());
}
System.out.println("--------");
Node n = doc.selectSingleNode("//book[@id='1']//name");
System.out.println("书名为:"+n.getText());
fis.close();
}
}
以下是效果图:
可以看到使用XPATH后代码就简短很多,这就是使用路径来找节点的好处,不用一层一层往下找,直接定位到节点位置,而且还可以根据节点属性来更准确的找到某个节点然后操作数据。
1.4.4.6.5、使用XPATH解析网络XML文件的步奏
- 导包,和上面XPATH解析本地XML文件时导的包一样
- 创建URL对象url,写入网址,代码和DOM4J解析网络XML文件的一样
- 创建URLConnection对象con,建立网络连接,代码和DOM4J解析网络XML文件的一样
- 获取资源的输入流,代码和DOM4J解析网络XML文件的一样
- 创建一个XML读取工具对象sr,代码和DOM4J解析网络XML文件的一样
- 通过文档对象doc调用两个方法来获取节点对象或节点对象的集合,代码和XPATH解析本地XML文件的一样
- 之后节点对象调用方法来操作数据,方法和上面所介绍的DOM4J的解析方法是一样的
1.4.6.6.6、XPATH解析网络XML文件的代码和效果图
还是用电话号码的例子来演示:
以下是解析网络XML文件的java代码:
public class Test3 {
public static void main(String[] args) throws IOException, DocumentException {
String phone = "14715046330";
URL url = new URL("http://apis.juhe.cn/mobile/get?phone="+phone+
"&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
Node code = doc.selectSingleNode("//resultcode");
Node province = doc.selectSingleNode("//province");
Node city = doc.selectSingleNode("//city");
Node zip = doc.selectSingleNode("//zip");
Node company = doc.selectSingleNode("//company");
if("200".equals(code.getText())){
if(province.getText().equals(city.getText())){
System.out.println("该电话号码的归属地为:"+city.getText()+"市," +
"归属地的邮政编码为:"+zip.getText()+",运行商为:"+company.getText());
}else {
System.out.println("该电话号码的归属地为:"+province.getText()+"省,"+city.getText()+"市," +
"归属地的邮政编码为:"+zip.getText()+",运行商为:"+company.getText());
}
}else {
System.out.println("请输入正确的电话号码!");
}
}
}
以下是效果图:
不要感觉和上面的DOM4J解析网络XML文件的代码量差不多,只因为我这个案例中的XML文件中的父/子节点之间的嵌套比较少,当嵌套的父/子节点越多,使用XPATH解析的方式就越方便。
DOM4J解析XML文件的相关技术知识就讲解到这,下面介绍Java如何编写程序来生成XML文件
1.5、熟悉Java生成XML文件
Java可以通过代码来解析XML文件,也可以生成XML文件,下面就来介绍Java是如何通过代码来生成XML文件。
1.5.1、Java生成本地XML文件的步骤
- 通过文档帮助器DocumentHelper调用createDocument方法生成一个空文档对象doc
Document doc = DocumentHelper.createDocument();
- 通过文档对象doc调用addElement方法添加名称为name的根节点对象root
Element root = doc.addElement(String name);
- 通过节点对象root调用addElement方法添加名称为name的子节点对象e,当然节点对象e也可以调用addElement方法生成它的子节点,可以一直嵌套,丰富节点
Element e = root.addElement(String name);
- 通过节点对象e调用setText方法给节点添加内容为value,调用addAttribute方法给节点e添加属性名为key,属性值为value的属性
e.setText(String value);
e.addAttribute(String key,String value);
- 创建文件输出流对象fos,并写入文件地址(绝对地址或相对地址)
FileOutputStream fos = new FileOutputStream("文件地址");
- 创建XML文档输出流对象xw将文件输出流转换成XML文档输出流
XMLWriter xw = new XMLWriter(fos);
- 通过XML文档输出流对象调用write方法进行写出操作
xw.write(doc);
1.5.2、生成本地XML文件的代码和效果图
以下是Java代码
public class Test4 {
public static void main(String[] args) throws IOException {
Document doc = DocumentHelper.createDocument();
Element persons = doc.addElement("Persons");
for(int i=1;i<3;i++) {
Element person = persons.addElement("person");
Element name = person.addElement("name");
Element age = person.addElement("age");
person.addAttribute("id",i+"");
if(i==1){
name.setText("张三");
age.setText("20");
}else {
name.setText("王五");
age.setText("25");
}
}
FileOutputStream fos = new FileOutputStream("person.xml");
XMLWriter xw = new XMLWriter(fos);
xw.write(doc);
fos.close();
xw.close();
System.out.println("XML文件生成已完成!");
}
}
以下是控制台输出效果
以下是生成的XML文件内容
<?xml version="1.0" encoding="UTF-8"?>
<Persons>
<person id="1">
<name>张三</name>
<age>20</age>
</person>
<person id="2">
<name>王五</name>
<age>25</age>
</person>
</Persons>
1.5.3、了解XStream的使用
使用XStream能快速将Java中的对象转换成XML字符串,这样就可以生成XML文件就简单很多了,不用自己去实现添加节点,设置节点内容等操作,该工具中的方法可以很快的自动生成出来。
1.5.3.1、使用XStream生成XML文件的步骤
- 在IDEA中导入Jar包:xstream-1.3.1.jar
- 创建一个类对象(你自己定义)
- 创建XStream对象x
XStream x = new XStream();
- 通过XStream对象x调用alias方法将类生成的根节点名称修改为name(默认的名称是:包名.类名),该步骤也可以省略
x.alias(String name,类名.class);
- 通过XStream对象x调用toXML方法生成XML字符串
String xml = x.toXML(类对象)
1.5.3.2、XSream生成XML文件的代码
以下是Java代码
public class Test5 {
public static void main(String[] args) throws IOException {
Person p = new Person();
p.setName("李四");
p.setAge(18);
XStream xs = new XStream();
xs.alias("Person",Person.class);
String xml = xs.toXML(p);
System.out.println(xml);
System.out.println("XML文件生成已完成!");
}
}
以下是效果图
关于XML的解析就到这,下面进入下个阶段:基于Java语言了解JSON
2、基于Java语言了解JSON
2.1、了解JSON的简介
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2.2、掌握JSON的语法格式
JSON是一个序列化的对象或数组,而对象和数组的表示方法是不一样的,下面就来详细说明JSON是如何表示一个对象或数组的。
2.2.1、表示对象的格式
- JSON表示一个对象用一对大括号表示:{}
- 在括号中通过键值对来描述对象的属性,注意属性名一定要用英文的双引号引住,属性值中,字符串用英文双引号引住,数字可以不加引号。
- 键值对中的键和值用英文冒号链接,多个键值对之间用英文逗号隔开
- 键值对的值可以是:对象、数组、数字、字符串中的一个
2.2.2、表示数组的格式
- JSON表示一个数组用一对中括号表示:[]
- 在括号中可以添加数组元素,元素可以用对象、数字、字符串中的一个来表示,多个元素之间用英文逗号隔开
JSON实例:
{
"name":"张三",
"age": 18,
"friend":[{"name":"李四","age":19},{"name":"王五","age":18},"陈二"]
}
2.3、了解JSON解析工具
在Java中常用的JSON解析工具有两种:
- Gson,谷歌推出的JSON解析工具
- FastJson,阿里推出的JSON解析工具
要使用这两个工具是要进行引入Jar包操作的,使用Gson工具需要引入的Jar包为:gson-2.8.6.jar;而使用FastJson工具需要引入的Jar包为:fastjson-1.2.70.jar。
2.3.1、掌握使用Gson工具解析JSON
2.3.1.1、将Java对象换成JSON字符串
2.3.1.1.1、 实现步骤
- 引入Jar包
- 创建一个类对象(自己自定义)
- 创建一个Gson类的对象g
Gson g = new Gson()
- 通过对象g调用toJson方法并传入类对象,将类对象转换成JSON字符串
String json = g.toJson(类对象);
2.3.1.1.2、具体Java代码和效果图
以下是Java代码
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setAge(18);
Gson g = new Gson();
String person = g.toJson(p);
System.out.println(person);
}
}
以下是运行效果图
2.3.1.2、将JSON字符串转换成Java对象
2.3.1.2.1、实现步骤
- 引入Jar包
- 创建一个类(自己自定义)
- 创建一个Gson对象g
Gson g = new Gson();
- 通过对象g调用fromJson方法并传入两个参数:JSON字符串和需要转成的类型,将JSON字符串转换成指定的类型
<T> t = g.fromJson("JSON字符串", 类型.class);
2.3.1.2.2、具体的Java代码和效果图
以下是Java代码
public class Test1 {
public static void main(String[] args) {
Gson g = new Gson();
Person person = g.fromJson("{\"name\":\"张三\",\"age\":18}", Person.class);
System.out.println("姓名:"+person.getName()+",年龄:"+person.getAge());
}
}
以下是运行效果图
2.3.2、掌握使FastJson工具解析JSON
2.3.2.1、将Java对象转换成JSON字符串
2.3.2.1.1、实现步骤
- 引入Jar包
- 创建一个类对象(自己自定义)
- 通过JSON调用toJSONString方法将类对象转换成JSON字符串
String person = JSON.toJSONString(类对象)
2.3.2.1.2、具体Java代码和效果图
以下是Java代码
public class Test2 {
public static void main(String[] args) {
Person p = new Person();
p.setName("李四");
p.setAge(20);
String person = JSON.toJSONString(p);
System.out.println(person);
}
}
以下是运行效果图
2.3.2.2、将JSON字符串转换成Java对象
2.3.2.2.1、实现步骤
- 引入Jar包
- 通过JSON调用parseObject方法并传入两个参数:JSON字符串和需要转成的类型,将JSON字符串转换成指定的类型
<T> t = JSON.parseObject("JSON字符串", 类型.class);
2.3.2.2.2、具体Java代码和效果图
以下是Java代码
public class Test3 {
public static void main(String[] args) {
Person person = JSON.parseObject("{\"age\":20,\"name\":\"李四\"}", Person.class);
System.out.println("姓名:"+person.getName()+",年龄:"+person.getAge());
}
}
以下是运行效果图
关于JSON的相关知识就分享到这,希望文章可以帮到你们。