JSON格式
首先JSON是由一个大括号加多个键值对组成,同时值中还可以添加数组格式的内容或是新的大括号
数组格式: 在JSON中可以与对象互相嵌套 [元素1,元素2…]
一个对象, 由一个大括号表示.
括号中 描述对象的属性 . 通过键值对来描述对象的属性
(可以理解为, 大括号中, 包含的是一个个的键值对.)
格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
键值对的值, 可以是JS中的任意类型的数据
如:
{
"name":"我是你爸爸",
"age":18,
"paoyou":["张三","李四","王二","麻子",{
"name":"野马老师",
"info":"像匹野马一样狂奔在技术钻研的道路上"
}],
"heihei":{
"name":"大长刀",
"length":"40m"
}
}
这里面就是最外面大括号,然后键值对,值中还可以进行 数组 或是 大括号 的添加(数组中的一般都是值,大括号里的都是键值对)
将JSON字符串转化为对象
我们先编写一个Book类,其中包含id,name,info属性
再定义一个json字符串:
{
"name":"大哥大",
"id":"11",
"info":"我没有大哥大"
}
再通过两种方式进行转化
有两种转换的jar包:
GSON,Fastjson
GSON
1、在操作前我们需要引入使用GSON的jar包
2、在java编译器中输入进行如下操作,此时返回的就会是对象了
类型 对象 = new Gson().fromJson(JSON字符串,对象类型.class);
案例(通过字符流转化为字符串再转化为对象):
File file = new File("demo1.json");
//获取字节输入流
FileInputStream fis = new FileInputStream(file);
//先获取流中字节的长度
int length = fis.available();
//定义一个数组
byte[] b = new byte[length];
//将流读取并添加到这个数组中
fis.read(b);
fis.close();
//直接将这个数组放入String中读取并返回
String s = new String(b);
//先创建GSON对象来使用通过s来获取对象的方法
Gson g = new Gson();
//通过fromJson获取对象
Book book = g.fromJson(s, Book.class);
System.out.println(book);
FastJson
1、在操作前我们需要引入使用FastJson的jar包
2、在java编译器中输入进行如下操作,此时返回的就会是对象了
类型 对象名 = JSON.parseObject(JSON字符串, 类型.class);
或
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
案例(除了转换的方式其他的都是一样的):
Book book = JSON.parseObject(s, Book.class);
System.out.println(book);
将对象为转化JSON字符串
有两种转换的jar包:
GSON,FastJson
GSON
1、在操作前我们需要引入使用GSON的jar包
2、在java编译器中输入进行如下操作,此时返回的就会是json字符串了
String json=new Gson().toJSON(要转换的对象);
案例
//将之前的对象直接转化为json字符串
String json = new Gson().toJson(book);
System.out.println(json);
FastJson
1、在操作前我们需要引入使用FastJson的jar包
2、在java编译器中输入进行如下操作,此时返回的就会是json字符串了
//将之前的对象直接转化为json字符串
String s1 = JSON.toJSONString(book);
System.out.println(s1);
两者的区别
同:首先这两个都需要导入jar包
不同:
GSON需要先new一个对象再进行操作
FastJson只需要直接JSON.方法即可