JSON使用笔记
JSON
简介:
JSON: JavaScript Object Notation JS对象简谱 , 是一种轻量级的数据交换格式.
2.1 对象格式
//java类表示
class Book{
private String name;
private String info;
//其他方法
get/set...
}
//创建对象
Book b = new Book();
b.setName(“金苹果”);
b.setInfo(“种苹果”);
//XML:
<book>
<name>金苹果</name>
<info>种苹果</info>
</book>
//JSON:
{
"name":"金苹果",
"info":"种苹果"
}
一个对象, 由一个大括号表示.
括号中 描述对象的属性 . 通过键值对来描述对象的属性 (可以理解为, 大括号中, 包含的是一个个的键值对.)
{
"key1":"value1",
"key2":"value2",
"key3":"value3",
"key4":"value4"
}
格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
键值对的值, 可以是JS中的任意类型的数据
2.2 数组格式
在JSON格式中可以与对象互相嵌套
[元素1,元素2...]
2.3 案例
{
"name":"小明",
"age":18,
"pengyou":["张三","李四","王五","麻子",
{
"name":"老师",
"info":"技术钻研"
}
],
"heihei":{
"name":"大长刀",
"length":"40m"
}
}
主要是理解 数组中可以放对象,对象中可以放数组 的思想,先不必深究, 后面有案例解释
3 Gson
谷歌的解析工具
转换JSON字符串的步骤:
1. 引入JAR包
2. 在需要转换JSON字符串的位置编写如下代码即可:
String json = new Gson().toJSON(要转换的对象);
3. 在需要转换Java对象的位置, 编写如下代码:
对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例:
//要转换的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;
}
}
将对象转换为JSON字符串
Book b = new Book(100, "金苹果","种植苹果");
//1.创建Gson对象
Gson g = new Gson();
//转换
String s = g.toJson(b);
//输出
System.out.println(s);
将JSON字符串转换为对象
//1.创建Gson对象
Gson g = new Gson();
//2.转换 ,在字符串中使用转义字符\,即\"表示”
Book b = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果\"}"
, Book.class);
System.out.println(b.getId());
其他案例(由此可理解数组格式的案例)
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换 包含数组格式的JSON
HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\",\"谁知盘中餐\"]}"
, HashMap.class);
//获取page内容
System.out.println(data.get("page"));
//获取page类型
System.out.println(data.get("page").getClass());
//用集合获取
List page = (List) data.get("page");
System.out.println(page.get(0));
System.out.println(page.get(1));
System.out.println(page.get(2));
由此可见,数组格式的类型是ArrayLisy。
如果数组中再添加对象呢
//1. 创建Gson对象
Gson g = new Gson();
//2. 转换
HashMap data = g.fromJson("{\"id\":\"100\",\"name\":\"金苹果\",\"info\":\"种植苹果真辛苦\",\"page\":[\"锄禾日当午\",\"汗滴禾下土\"" +
",{\"name\":\"老师\",\"info\":\"技术钻研\" }]}"
, HashMap.class);
//获取page内容
System.out.println(data.get("page"));
//获取page类型
System.out.println(data.get("page").getClass());
//用集合获取
List page = (List) data.get("page");
System.out.println(page.get(0));
System.out.println(page.get(1));
System.out.println(page.get(2));
//获取对象类型
System.out.println(page.get(2).getClass());
由此可见,数组中加入的对象类型是LinkedTreeMap
4 FastJson
步骤:
1. 引入JAR包
2. 在需要转换JSON字符串的位置编写如下代码即可:
String json=JSON.toJSONString(要转换的对象);
3. 在需要转换Java对象的位置, 编写如下代码:
类型 对象名=JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
将对象转换为JSON字符串
Book book = new Book("1002","唐诗","床前明月光");
//转换
String json = JSON.toJSONString(book);
System.out.println(json);
将JSON字符串转换为对象
Book book = JSON.parseObject("{\"id\":\"1002\",\"info\":\"床前明月光\",\"name\":\"唐诗\"}"
, Book.class);
System.out.println(book.getId());
System.out.println(book.getName());
System.out.println(book.getInfo());
其他案例(数组)
//转换
List<String> strings = JSON.parseArray("[\"一二三\",\"二三四\",\"三四五\"]", String.class);
System.out.println(strings.get(0));
System.out.println(strings.get(1));
System.out.println(strings.get(2));