JSON解析详解 不看后悔系列
简介:
JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式.
对象格式
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":"种苹果"
}
一个对象, 由一个大括号表示.括号中描述对象的属性
通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.) 格式:
1. 键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
2. 键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析)
3. 键值对的值,可以是 JS 中任意类型的数
数组格式:
在JSON格式中可以与对象互相嵌套
[元素1,元素2...]
Gson
首先创建一个Book类用于转换,分别有name,id,info三个属性
package com.java;
import java.util.Objects;
public class Book {
String name;
String id;
String info;
public Book() {
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", info='" + info + '\'' +
'}';
}
@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(name, book.name) &&
Objects.equals(id, book.id) &&
Objects.equals(info, book.info);
}
@Override
public int hashCode() {
return Objects.hash(name, id, info);
}
public Book(String name, String id, String info) {
this.name = name;
this.id = id;
this.info = info;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
将对象转换为 JSON 字符串
转换JSON字符串的步骤:
1. 引入JAR包
2. 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
案例:
package com.java;
import com.google.gson.Gson;
import java.util.Objects;
public class Demo05 {
/**
* gson格式转换 将对象转换为Json格式
* @param args
*/
public static void main(String[] args) {
//1. 创建需要转换的对象
Book b = new Book("白夜行","10001","悬疑类小说");
//2. 创建 Gson 对象
Gson gson = new Gson();
//3. 将对象转换为Json
String json = gson.toJson(b);
System.out.println(json);
}
}
/*
{"name":"白夜行","id":"10001","info":"悬疑类小说"}
*/
将 JSON 字符串转换为对象
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码: 对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例:
package com.java;
import com.google.gson.Gson;
import java.util.HashMap;
public class Demo06 {
/**
* Gson Json格式转换为对象
* @param args
*/
public static void main(String[] args) {
//1. 创建Gson对象
Gson gson = new Gson();
//2. 创建Json字符串
String json = "{\"name\":\"白夜行\",\"id\":\"10001\",\"info\":\"悬疑类小说\"}";
//3. 将Json转换为对象
Book b = gson.fromJson(json, Book.class);
System.out.println(b.getName());
//当不存在对应Book对象时,可以转换为Map对象(键值对方式)
HashMap data = gson.fromJson(json, HashMap.class);
System.out.println(data.get("info"));
}
}
/*
白夜行
悬疑类小说
*/
Gson转换Json格式中值为数组的情况
package com.java;
import com.google.gson.Gson;
import java.util.HashMap;
import java.util.List;
public class Demo07 {
/**
* Gson Json格式转换为对象
* @param args
*/
public static void main(String[] args) {
//1. 创建Gson对象
Gson gson = new Gson();
//2. 创建Json字符串
String json = "{\"name\":\"白夜行\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"粒粒皆辛苦\",\"谁知盘中餐\"],\"info\":\"悬疑类小说\"}";
//3. 将Json转换为对象
Book b = gson.fromJson(json, Book.class);
//当不存在对应Book对象时,可以转换为Map对象(键值对方式)
HashMap data = gson.fromJson(json, HashMap.class);
System.out.println(data.get("page").getClass());
//返回 class java.util.ArrayList
List list = (List)data.get("page");
System.out.println(list.get(1));
}
}
/*
class java.util.ArrayList
汗滴禾下土
*/
FastJson
将对象转换为 JSON 字符串
转换JSON字符串的步骤:
1. 引入JAR包
2. 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
案例:
package com.java;
import com.alibaba.fastjson.JSON;
public class Demo08 {
/**
* FastJson 对象转换为 Json格式
* @param args
*/
public static void main(String[] args) {
//1. 创建需要转换的对象
Book b = new Book("白夜行","10001","悬疑类小说");
//2. 创建返回的 Json 字符串
String json = JSON.toJSONString(b);
System.out.println(json);
}
}
/*
{"id":"10001","info":"悬疑类小说","name":"白夜行"}
*/
将 JSON 字符串转换为对象
- 引入JAR包
- 在需要转换Java对象的位置, 编写如下代码:
类型
对象名=JSON.parseObject(JSON字符串, 类型.class);
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
案例:
package com.java;
import com.alibaba.fastjson.JSON;
public class Demo09 {
/**
* 使用FastJson 将Json格式转换为对象
* @param args
*/
public static void main(String[] args) {
//1. 创建 Json 字符串
String json = "{\"id\":\"10001\",\"info\":\"悬疑类小说\",\"name\":\"白夜行\"}";
//2. 调用 Json parseObject方法 转换为对象
Book b = JSON.parseObject(json,Book.class);
System.out.println(b.getName());
}
}
/*
白夜行
*/
FastJson解析数组
package com.java;
import com.alibaba.fastjson.JSON;
import java.util.List;
public class Demo10 {
/**
* FastJson解析数组
* @param args
*/
public static void main(String[] args) {
String json = "[\"锄禾日当午\",\"汗滴禾下土\",\"粒粒皆辛苦\",\"谁知盘中餐\"]";
List<String> strings = JSON.parseArray(json,String.class);
System.out.println(strings.get(2));
}
}
/*
粒粒皆辛苦
*/