Java中JSON的生成与解析 详解Java中JSON数据的生成与解析
人生技术初学者 人气:0一、什么是JSON
JSON: JavaScript Object Notation JS对象简谱,是一种类似于XML的语言。相比于XML,它更小、更快、更易解析。主要用于项目前端和Server的网络数据传输。
二、JSON的语法
对象
一个对象,由一个大括号表示{},{}中通过一个个的键值对来描述对象的属性
注意:
键与值之间使用冒号连接,多个键值对之间使用逗号分隔。
键值对的键,应使用引号引住(通常Java解析时,键不使用引号会报错,而JS能正确解析);键值对的值,可以是JS中的任意数据类型
格式:
{
键1:值1,
键2:值2,
.
.
}
案例:使用JSON描述一本书,属性: 书名、简介
{ "name":"自控力", "info":"如何提升自己的自控力" }
数组格式
[]表示数组,在JSON中,数组可以与对象互相嵌套
格式:
[元素1,元素2,…]
案例:
{
“name”:[“自控力”,“浪潮之巅”]
}
三、JSON与Java对象之间的相互转换
JSON和Java对象之间的转换目前主要是通过引用Gson类库或者FastJson类库来进行操作
Gson
Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Java对象转换为JSON字符串,也可以将一个JSON字符串转换为一个Java对象。
将Java对象转换为JSON字符串 步骤:
1.引入JAR包
2.在需要转换的JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(需要转换的对象);
案例:
编写一个Book对象类
public class Book { private String id; private String name; private String info; @Override public String toString() { return "Book{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", info='" + info + '\'' + '}'; } public Book(String id, String name, String info) { this.id = id; this.name = name; this.info = info; } public Book() { } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Book book = (Book) o; return Objects.equals(id, book.id) && Objects.equals(name, book.name) && Objects.equals(info, book.info); } @Override public int hashCode() { return Objects.hash(id, name, info); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }
将Book对象转化为JSON
public class toJSON { public static void main(String[] args) { //1. 创建Gson对象 Gson g = new Gson(); //2. 转换 Book b = new Book("10","自控力","如何提升自控力"); String s = g.toJson(b); System.out.println(s); } } 输出结过为: {"id":"10","name":"自控力","info":"如何提升自控力"}
将JSON字符串转换为一个Java对象
1.引入JAR包
2.在需要转换的Java对象的位置编写如下代码即可:
对象=new Gson().fromJson(JSON字符串,对象类型.class);
注意:
当转换的Java对象不包含JSON字符串中的属性时,转换过程中可能会出现属性丢失的情况。解决办法:转换为Map集合
案例:
将JSON字符串转换为Book对象
public class toBook { public static void main(String[] args) { //1. 创建Gson对象 Gson g = new Gson(); //2. 转换 : {"id":"10","name":"自控力","info":"如何提升自控力"} Book b = g.fromJson("{\"id\":\"10\",\"name\":\"自控力\",\"info\":\"如何提升自控力\"}", Book.class); System.out.println(b.getId()); } } 结果: 10
将JSON字符串转换为Map集合
注意:
当JSON中存在数组格式的键值对时,数组格式的键值对转换为最终结果为List类型
public class toMap{ public static void main(String[] args) { //1. 创建Gson对象 Gson g = new Gson(); //2. 转换 HashMap data = g.fromJson("{\"id\":\"10\",\"name\":\"自控力\",\"info\":\"如何提升自控力\", \"page\":[\"时间管控方式\",\"自我暗示法\"]}"HashMap.class); List page=(List) data.get("page"); System.out.println(data.get("id")); System.out.println(page.get("1")); } } 运行结果: 10 时间管控方式
FastJson
FastJson是阿里提供的用来在Java对象和JSON数据之间进行映射的Java类库。
将Java对象转换为JSON字符串
步骤:
1.引入JAR包
2.在需要转换的JSON字符串的位置编写如下代码即可:
相比Gson FastJson不需要创建新的对象
String json = JSON.toJSONString(需要转换的对象);
将JSON字符串转换为一个Java对象
步骤:
1.引入JAR包
2.在需要转换的JSON字符串的位置编写如下代码即可:
转对象
String json = JSON.parseObject(JSON字符串,类型.class);
转List
List<类型>list=JSON.parseArray(JSON字符串,类型.class);
四、总结:
JSON对于移动设备来说,尤其对于网络环境较差和流量限制的情况下,相对于XML格式的数据传输会更节省流量,传输效率更高。
参考
加载全部内容