JSON介绍
JSON:json(JavaScript Object Notation)是一种轻量级的数据交换格式,json相较于XML来说,json更加小巧,且描述能力并不差,所以网络传输时使用的流量更加少,速度更快。故而json的逐渐代替XML,但是并不能完全取代,XML现在基本用来配置文件更加多。
json的描述格式介绍:
{} : 表示一个对象
[] : 表示一个数组
对象中的属性可以看做一个个 键值对 ,属性或者值使用 " " 引号 来表示,键 与 值之间使用 :冒号来连接 例如: {"name" : "小白"}
. 每一个键值对使用 ,逗号分隔。
注意:json 数组中可以嵌套对象,键值对中的值可以为对象。
json案例:
{
"naem":"小红",
"age":"18",
"friend":["张三","李四",{
"name":"小白",
"age":"17"
}],
"newfriend":{
"name":"小花",
"age":"19"
}
}
数据多复杂的话可以使用网上在线解析工具 json视图,数据查看一目了然。
JSON解析之GSON解析
解析前需下载并引入 gson,jar 包(百度、GitHub等下载),gson是Google提供用来解析 json 的类库。
一、将 Java 对象转换为 json字符串
- 创建测试类 Book;
- Book 具有 名称 (name),介绍(info)等属性;
import com.google.gson.Gson;
public class Test_GSON {
public static void main(String[] args) {
// 创建 Book 对象
Book book = new Book("唐诗三百首","是由清朝蘅塘退士编撰的一部唐诗选集");
// 把 book 转换为 json 字符串
String json = new Gson().toJson(book,Book.class);
System.out.println(json);
}
// Book 测试类
static class Book{
private String name;
private String info;
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
public Book(String name, String info) {
this.name = name;
this.info = info;
}
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;
}
}
}
结果:
{"name":"唐诗三百首","info":"是由清朝蘅塘退士编撰的一部唐诗选集"}
二、解析 JSON 为 Java对象
/**
* 解析 JSON
*/
public class Test_GSON {
public static void main(String[] args) {
String json = "{\"name\":\"唐诗三百首\",\"info\":\"是由清朝蘅塘退士编撰的一部唐诗选集\"}";
Book book = new Gson().fromJson(json,Book.class);
System.out.println(book);
}
}
结果:
Book{bookName='null', numBer='null', price=0}
三、 解析 json 为 Map 集合
1.创建 json 字符串;
2.解析 json
import com.google.gson.Gson;
import java.util.HashMap;
/**
* 解析 JSON
*/
public class Test_GSON {
public static void main(String[] args) {
// 创建 json
String json = "{\"content\":[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]}";
// 解析 json
HashMap data = new Gson().fromJson(json, HashMap.class);
System.out.println(data.get("content"));
}
}
结果:
[锄禾日当午, 汗滴禾下土, 谁知盘中餐, 粒粒皆辛苦]
注意:json数组看似是一个字符串数组,实质 则为 ArrayList 集合。
import com.google.gson.Gson;
import java.util.HashMap;
/**
* 解析 JSON
*/
public class Test_GSON {
public static void main(String[] args) {
// 创建 json
String json = "{\"content\":[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]}";
// 解析 json
HashMap data = new Gson().fromJson(json, HashMap.class);
System.out.println(data.get("content").getClass());
}
}
结果:
JSON解析之FastJson
FastJson :FastJson是阿里巴巴的的开源库,用于对JSON格式的数据进行解析和打包。
一、将 Java 对象转换为 json字符串
- 创建测试类 Book;
- Book 具有 名称 (name),介绍(info)等属性;
import com.alibaba.fastjson.JSON;
/**
* 将 Java 对象转换为 json字符串
*/
public class Test_FastJson {
public static void main(String[] args) {
// 创建 Book 对象
Book book = new Book("唐诗三百首","是由清朝蘅塘退士编撰的一部唐诗选集");
// 转换为 JSON字符串
String json = JSON.toJSONString(book);
System.out.println(json);
}
结果:
{"info":"是由清朝蘅塘退士编撰的一部唐诗选集","name":"唐诗三百首"}
二、解析 JSON 为 Java对象
import com.alibaba.fastjson.JSON;
/**
* 解析 Json 为 Java 对象
*/
public class Test_FastJson {
public static void main(String[] args) {
// 创建 json 字符串
String json = "{\"info\":\"是由清朝蘅塘退士编撰的一部唐诗选集\",\"name\":\"唐诗三百首\"}";
// 解析 json
Book book = JSON.parseObject(json, Book.class);
System.out.println(book);
}
}
结果:
Book{name='唐诗三百首', info='是由清朝蘅塘退士编撰的一部唐诗选集'}
三、解析 JSON 字符串数组
import com.alibaba.fastjson.JSON;
import java.util.List;
/**
* 解析 Json 字符串数组
*/
public class Test_FastJson {
public static void main(String[] args) {
// 创建 json 字符串数组
String json = "[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\",\"粒粒皆辛苦\"]";
// 解析 json
List<String> data = JSON.parseArray(json,String.class);
System.out.println(data.get(1));
}
}
结果:
汗滴禾下土
FastJson国内使用较多,个人推荐使用Gson,比较稳定。
以上为个人理解,如有错误,欢迎纠正。