一、JSON简述
JSON(JavaScript Object Notation) JavaScript对象表示法(JSON源于JS)
JSON的特点:
- JSON 是一种轻量级的数据交换格式。
- JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。
- JSON易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
二、XML与JSON的区别
-
XML : 可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
-
JSON: (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。
-
相同点: 它们都可以作为一种数据交换格式。
-
二者区别:
-
XML是重量级的,JSON是轻量级的,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩。
-
XML和json都用在项目交互下,XML多用于做配置文件,JSON用于数据交互
-
JSON独立于编程语言存在,任何编程语言都可以去解析json
-
三、JSON语法格式
JSON数据
{
"id": 10,
"name": "Timi",
"age": 25
}
语法注意:
-
外面由{}括起来
-
数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)
-
每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号
-
参数值如果是string类型,就必须加引号,如果是数字类型,引号可加可不加
只要遵守上面4点,便可以形成一个json对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON</title>
<script typet="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script>
//自定义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);
</script>
</head>
<body>
</body>
</html>
四、### JSON数据的转换
目前, 前后端的ajax通讯几乎用的都是json格式的了,所以在开发的过程中,我们经常会涉及到JSON数据的转换
1. FastJson介绍
- Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
- FastJson特点如下:
- 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。
- 顾名思义,FastJson操作JSON的速度是非常快的。
- 无其他包的依赖, 使用比较方便。
2.FastJson的使用
- 在Maven项目中使用FastJson库,需要提前在Maven的配置文件中添加此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>
3.将 Java 对象转换为 JSON 格式
①定义一个名为 Person 的 JavaBean类
public class Person {
private String username;
private int age;
get/set方法
}
②使用 JSON.toJSONString() 将 Java 对象转换换为 JSON 对象
public class TestFastJSON {
//Java对象转JSON
@Test
public void javaBeanToJSON(){
//创建Person对象
Person p = new Person("码云",15);
//使用JSON对象的 toString方法将对象转换为JOSN数据
String s = JSON.toJSONString(p);
System.out.println(s); //{"age":15,"username":码云"}
}
//List集合转Json
@Test
public void ListToJSON(){
//创建Person对象
Person p1 = new Person("A",15);
Person p2 = new Person("B",13);
Person p3 = new Person("C",18);
List<Person> list = new ArrayList<>();
Collections.addAll(list,p1,p2,p3);
//使用JSON对象的 toString方法将对象转换为JOSN数据
String s = JSON.toJSONString(list);
System.out.println(s);
//[{"age":15,"username":"A"},{"age":13,"username":"B"},{"age":18,"username":"C"}]
}
}
4.Fastjson中的 @JSONField注解
- 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记。
- 指定name属性, 字段的名称
- 使用 ordinal属性, 指定字段的顺序
- 使用 serialize属性, 指定字段不序列化
public class Person {
//自定义输出的名称, 并且进行输出排序
@JSONField(name="USERNAME",ordinal = 1)
private String username;
@JSONField(name="AGE",ordinal = 2)
private int age;
//排除不需要序列化的字段
@JSONField(serialize = false)
private String birthday;
public Person() {
}
public Person(String username, int age) {
this.username = username;
this.age = age;
}
}
5.JSON 字符串转换为 Java 对象
- JSON.parseObject()
- 可以使用 JSON.parseObject() 将 JSON 字符串转换为 Java 对象。
- 注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常
- JSON.parseArray()
- 可以使用 JSON.parseArray() 将 JSON 字符串转换为 集合对象
//JSON转Java对象
@Test
public void JSONToJavaBean(){
String json = "{\"age\":15,\"username\":\"码云\"}";
Person person = JSON.parseObject(json, Person.class);
System.out.println(person);
//创建Person对象
String json2 ="[{\"age\":15,\"username\":\"A\"},{\"age\":13,\"username\":\"B\"},{\"age\":18,\"username\":\"C\"}]";
List<Person> list = JSON.parseArray(json2,Person.class);
System.out.println(list);
}