笔记输出来源:拉钩教育Java就业急训营
修改时间:2021年2月2日
作者:pp_x
邮箱:[email protected]
JSON目录
JSON
基本概念
- JSON(JavaScript Object Notation) JavaScript对象表示法(JSON源于JS)。
JSON的特点
- SON 是一种轻量级的数据交换格式。
- JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。
- JSON易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
XML和JSON的区别与联系
- XML : 可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
- JSON: (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
- 相同点:
- 它们都可以作为一种数据交换格式
- 异同点:
- XML是重量级的,JSON是轻量级的,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩。
- XML和json都用在项目交互下,XML多用于做配置文件,JSON用于数据交互
- JSON独立于编程语言存在,任何编程语言都可以去解析json
JSON的语法格式
{
"id": 110,
"name": "李会长",
"age": 24
}
- 外面由{}括起来
- 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)
- 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)
- 参数值如果是string类型,就必须加引号,如果是数字类型,引号可加可不加
//自定义JSON数据格式 (Java中的对象)
var person = {
"name":"tom","sex":"女", "age":12};
console.log(person);
//数组格式
var persons = {
"person":[{
"name":"tom","sex":"女", "age":12},{
"name":"jack","sex":"男", "age":22}]};
console.log(persons);
//集合
var list = [{
"name":"老五","sex":"女", "age":12},{
"name":"会长","sex":"男", "age":12}];
console.log(list)
JSON数据格式的转换
FastJSON概念
- Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
FastJSON的特点
- 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。
- 无其他包的依赖, 使用比较方便
FastJSON导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.3.1</version>
</dependency>
Java对象转换为JSON格式
- 使用toJSONString方法
//Java对象转换成json
@Test
public void javaBeanToJSON() {
//创建person类
Person person = new Person("柳小潇", 25, DateUtils.getDateFormart());
// 使用JSON对对象 将person对象转化成json数据
String string = JSON.toJSONString(person);
System.out.println(string);
}
//将Java中的集合转换成json
@Test
public void ListToJSON() {
Person person = new Person("柳小潇", 25, DateUtils.getDateFormart());
Person person2 = new Person("柳小潇", 25, DateUtils.getDateFormart());
Person person3 = new Person("柳小潇", 25, DateUtils.getDateFormart());
//创建一个List集合
ArrayList<Person> list = new ArrayList<>();
//使用集合工具类将对象封装到集合
Collections.addAll(list, person, person2, person3);
//使用json对象的方法转为json格式
String string = JSON.toJSONString(list);
System.out.println(string);
}
FastJSON中的注解
- 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记。
- 指定name属性, 字段的名称
- 使用 ordinal属性, 指定字段的顺序
- 使用** serialize属性**, 指定字段不序列化
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
//可以通过name去指定输出的名称
//可以使用ordinal属性指定字段的顺序
//可以使用serialize数据指定字段是否可以序列化 即是否转为json
@JSONField(name = "USERNAME",ordinal = 1)
private String userName;
@JSONField(name = "AGE",ordinal = 2)
private int age;
@JSONField(serialize = false)
private String birthday;
}
JSON字符串转换为Java对象
- JSON.parseObject()
- 可以使用JSON.parseObject()将JSON字符串转换为Java对象
- 转换(反序列化)时,需要对应的Java类有无参构造方法,否则会报错
- JSON.parseArray()
- 可以使用JSON.parseArray()将JSON字符串转换为集合对象
//将json数据格式转为Java对象
@Test
public void JSONToJavaBean(){
String json = "{\"age\":15,\"birthday\":\"2020-07-03 19:54:33\",\"username\":\"码云\"}";
//使用JSON对象的parseObject的方法
Person jsonObject = JSON.parseObject(json,Person.class);
System.out.println(jsonObject);
}
public void JSONToJavaList(){
//将json集合转为list集合
String json2 ="[{\"age\":15,\"birthday\":\"2020-07-03 19:59:05\",\"username\":\"码云\"},{\"age\":13,\"birthday\":\"2020-07-03 19:59:05\",\"username\":\"虎子\"},{\"age\":18,\"birthday\":\"2020-07-03 19:59:05\",\"username\":\"小斌\"}]";
List<Person> persons = JSON.parseArray(json2, Person.class);
System.out.println(persons);
}