Json 介绍和解析
一、Json介绍
JavaScript Object Notation
Js对象简谱,是一种轻量级的数据交换格式。
Json 的对象格式
{
"name":"小火柴",
"info":"5块钱一根"
}
另外,对象之中也可以再套对象
{
"name":"张三",
"age":"18",
"firends":["法外","于谦","{"name":"赵四","age":"108"}"],
"info":"这里是嵌套对象的演示案例"
}
二、Json 解析
Java与Json
目的:
将Java中的对象 快速转换为Json格式的字符串。
将Json格式的字符串,转换为Java的对象。
目前只介绍两种工具
谷歌的Gson 和 阿里的FastJson
Gson
将对象转换为Json的字符串
//转换为Json字符串的步骤:
1. 引入JAR包
2. 需要转换Json字符串的位置编写如下代码即可:
String json = new Gson().toJson(要转的对象);
案例:
Book book = BookDao.find();
String json = new Gson().toJson(book);
System.out.println(json);
再举个栗子
// 1. 创建Gson对象
Gson g = new Gson();
// 2. 转换
Book book = new Book("100","金苹果","50块钱一个");
String s = g.toJson(book);
// 3.控制台打印出来
System.out.println(s);
将Json字符串转换为对象
1. 引入JAR包
2. 在需要转换Java对象的位置,编写如下代码:
对象 = new Gson().fromJson(Json字符串,对象类型.class);
案例:
String json = "{\"id\":1,\"name\":\"金苹果\",\"author\":\"张三\"}"
Book book = new Gson().fromJson(json,Book.class);
System.out.println(book);
再举个栗子
//前提,已经创建好Book类,且定义了三个属性,id、name、info 均为String类型
// 1. 创建Gson 对象
Gson g = new Gson();
// 2. 转换 :{"id":"100","name":"金苹果","info":"5快钱1个"} //这里的 id 为 String类型
Book book = g.fromJson({"id":"100","name":"金苹果","info":"5快钱1个"},Book.class);
// 3. 控制台打印出 该书 的id
System.out.println(book.getId());
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
HashMap hashmap = g.fromJson({"id":"100","name":"金苹果","info":"5快钱1个"},HashMap.class);
System.out.println(hashmap.get("id");
// 3. 如果Json 对象中存在一个[11,22,33,44] ArrayList对象,那么如何取 11,22,33,44
HashMap hashmap = g.fromJson({"id":"100","name":"金苹果","info":"5快钱1个","page":["11","22","33","44"]},HashMap.class);
List page = (List)hashmap.get("page");
System.out.println(page.get(1)); // 输出结果22 因为11是0下标 ,22 是1 下标
fastJson
对象转换成Json 格式
Book book = new Book("1002","中华上下五千年","500块一本");
// 转换
String json = JSON.toJSONString(book);
// 控制台打印
System.out.println(json);
将Json 转换成对象
Book book = JSON.parseObject({"id":"100","name":"金苹果","info":"5快钱1个"},Book.class);
// 控制台打印结果
System.out.println(book.getId());
// 转换数组 "["123","234","345"]"
List<String> strings = JSON.parseArray("["123","234","345"]",String.class);
System.out.println(strings.get(1)); // 234 234 为下标为 1