Tabla de contenido
Uno: regresión del formato de datos JSON
4. Formato anidado de objeto de matriz
Tres: API de serialización FastJson
Cuatro: API de deserialización de FashJson
Cinco: SerializerFeature enumeración
Ocho: SpringMVC integra FastJson
Uno: regresión del formato de datos JSON
1. ¿Qué es JSON?
JSON: (Notación de objetos JavaScript, Notación de objetos JS) es un formato ligero de intercambio de datos. Se basa en un subconjunto de ECMAScript (la especificación js desarrollada por la Asociación Europea de Informática) y utiliza un formato de texto que es completamente independiente del lenguaje de programación para almacenar y representar datos. La simplicidad y la clara jerarquía hacen de JSON un lenguaje de intercambio de datos ideal. Es fácil de leer y escribir para las personas, y también es fácil de analizar y generar para las máquinas, y puede mejorar efectivamente la eficiencia de la transmisión de la red. Actualmente, JSON es el rey de los lenguajes de intercambio de datos.
2. Formato de matriz Json
Los datos de Json en sí son una matriz, rodeada por corchetes, y los elementos de la matriz están separados por comas. No hay restricción en el tipo de datos de los elementos de la matriz.
var jsonArray = ["元素1","元素2","元素3"]; //定义数组格式json
console.log(jsonArray[0]); //访问json数组的元素
for(var i = 0 ; i < jsonArray.length ; i++){
console.log(jsonArray[i]); //遍历数组,访问每个元素
}
3. Formato de objeto Json
Los datos de Json en sí son un objeto, entre llaves. El objeto se almacena en forma de pares clave-valor, la clave se fija como un tipo de cadena y el valor es cualquier tipo de datos. La clave y el valor están separados por un colon
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定义对象格式json
console.log(jsonObject.k1); //取出键k1对应的值
4. Formato anidado de objeto de matriz
①: Los elementos de la matriz son objetos
var jsonArray = [
{"k1":"v1"},{"k2":"v2"}
]; // 定义数组格式json,数组元素是对象
console.log(jsonArray[0].k1); //访问数组0索引的元素,该元素的键k1对应的值
②: El valor en el objeto es una matriz
var jsonObject = {
"k1":["元素1","元素2"],
"k2":["元素1","元素2"]
}; // 定义对象格式json,键是字符串类型,值是数组
console.log(jsonObject.k1[0]); //访问对象的键是k1,对于的值为数组,数组的0索引元素
③: Estoy yo en ti, y tú en mí
var json = {
"k1":[
"元素1",{"key1":"value1"},{"key2":"value2"}
],
"k2":[
{"key1":"value1"}
]
}; //定义对象格式json,键是字符串,值是数组,数组的元素是对象
console.log(json.k1[1].key1); //访问json对象的键k1,对应的是数组,访问数组的1索引,数组的1索引上的元素是对象,访问key1键对应的值
Dos: Introducción a FastJson
FastJson es la biblioteca de análisis JSON de código abierto de Alibaba, que puede analizar cadenas con formato JSON, admite la serialización de Java Beans en cadenas JSON y deserializa de cadenas JSON a JavaBean.
Ventajas de Fastjson
-
En comparación con otras bibliotecas JSON, fastjson es rápido. Desde el lanzamiento de la versión 1.1.x de fastjson en 2011, su rendimiento nunca ha sido superado por otras bibliotecas JSON implementadas en Java .
-
Fastjson ampliamente utilizado se usa a gran escala en Alibaba y se implementa en decenas de miles de servidores Fastjson es ampliamente aceptado en la industria. En 2012, Open Source China lo seleccionó como uno de los software de código abierto nacionales más populares.
-
La prueba completa fastjson tiene muchos casos de prueba, en la versión 1.2.11, hay más de 3321 casos de prueba. Se realizan pruebas de regresión para cada versión para garantizar una calidad estable.
-
La API que usa fastjson simple es muy concisa.
-
Con todas las funciones, admite genéricos, admite procesamiento de flujo de textos grandes, admite enumeración y admite extensiones de serialización y deserialización.
Tres: API de serialización FastJson
Serialización: se refiere al proceso de convertir objetos Java en cadenas de formato json.Los objetos JavaBean, los objetos de colección de listas y las colecciones de mapas son los más utilizados.
-
JSON.aJSONString
-
Serializar objetos Java
-
public void objectToJson(){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(20);
student.setAddress("北京市");
student.setEmail("[email protected]");
String jsonString = JSON.toJSONString(student);
System.out.println(jsonString);
}
JSON.aJSONString
-
Serializar la colección List
public void listToJson(){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(20);
student.setAddress("北京市");
student.setEmail("[email protected]");
Student student2 = new Student();
student2.setId(2);
student2.setName("张三2");
student2.setAge(22);
student2.setAddress("北京市2");
student2.setEmail("[email protected]");
List<Student> list = new ArrayList<Student>();
list.add(student);
list.add(student2);
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
}
JSON.aJSONString
-
Serializar la colección de mapas
public void mapToJson(){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(20);
student.setAddress("北京市");
student.setEmail("[email protected]");
Student student2 = new Student();
student2.setId(2);
student2.setName("张三2");
student2.setAge(22);
student2.setAddress("北京市2");
student2.setEmail("[email protected]");
Map<String,Student> map = new HashMap<String, Student>();
map.put("s1",student);
map.put("s2",student2);
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);
}
Cuatro: API de deserialización de FashJson
JSON.parseObject
-
Deserializar objetos Java
public void jsonToObject(){
String jsonString = "{\"address\":\"北京市\",\"age\":20,\"email\":\"[email protected]\",\"id\":1,\"name\":\"张三\"}";
Student student = JSON.parseObject(jsonString, Student.class);
System.out.println(student);
}
JSON.parseArray
-
Deserializar la colección List
public void jsonToList(){
String jsonString = "[{\"address\":\"北京市\",\"age\":20,\"email\":\"[email protected]\",\"id\":1,\"name\":\"张三\"},{\"address\":\"北京市2\",\"age\":22,\"email\":\"[email protected]\",\"id\":2,\"name\":\"张三2\"}]";
List<Student> list = JSON.parseArray(jsonString,Student.class);
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(student);
}
}
JSON.parseObject
-
Deserializar la colección de mapas
public void jsonToMap(){
String jsonString = "{\"s1\":{\"address\":\"北京市\",\"age\":20,\"email\":\"[email protected]\",\"id\":1,\"name\":\"张三\"},\"s2\":{\"address\":\"北京市2\",\"age\":22,\"email\":\"[email protected]\",\"id\":2,\"name\":\"张三2\"}}";
Map<String,Student> parse = JSON.parseObject(jsonString,new TypeReference<Map<String,Student>>(){});
for(String s : parse.keySet()){
System.out.println(s + ":::"+parse.get(s));
}
}
Cinco: SerializerFeature enumeración
Esta enumeración admite algunas definiciones de datos característicos para la serialización.
-
La constante de enumeración WriteMapNullValue se serializa como un campo nulo
public void testSerializerFeature(){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(20);
//student.setAddress("北京市");
student.setEmail("[email protected]");
String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
System.out.println(jsonString);
}
El campo WriteNullStringAsEmpty de la constante de enumeración es nulo, serializado como ""
public void testSerializerFeature(){
Student student = new Student();
student.setId(1);
student.setName("张三");
student.setAge(20);
//student.setAddress("北京市");
student.setEmail("[email protected]");
String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
System.out.println(jsonString);
}
El campo WriteNullNumberAsZero de la constante de enumeración es nulo, serializado como 0
public void testSerializerFeature(){
Student student = new Student();
student.setId(1);
student.setName("张三");
//student.setAge(20);
student.setAddress("北京市");
student.setEmail("[email protected]");
String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
System.out.println(jsonString);
}
-
El valor del campo de la constante de enumeración WriteNullBooleanAsFalse es nulo y la salida es falsa
-
Constante de enumeración WriteDateUseDateFormat formato de fecha con formato
-
Salida con formato PrettyFormat constante de enumeración
public void testSerializerFeature2(){
Person person = new Person();
//person.setFlag(true);
person.setDate(new Date());
String jsonString = JSON.toJSONString(person,SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteDateUseDateFormat,SerializerFeature.PrettyFormat);
System.out.println(jsonString);
}
Seis: anotación @JSonField
Esta anotación actúa sobre métodos, campos y parámetros. Puede personalizarse para características y funciones durante la serialización y deserialización.
-
Atributo de anotación: nombre El nombre después de la serialización
-
Atributo de anotación: orden serializado ordinal
-
Atributo de anotación: formato de formato después de la serialización
-
Atributo de anotación: si serializar serializa el campo
-
Atributo de anotación: deserializar Si deserializar el campo
-
Atributo de anotación: serialzeFeatures Definición de características durante la serialización
Siete: @ anotación JSonType
Esta anotación actúa sobre la clase para personalizar la función de característica al serializar y deserializar los campos de la clase.
-
Atributo de anotación: incluye campos a serializar.
-
Atributo de anotación: pedidos El pedido después de la serialización.
-
Atributo de anotación: serialzeFeatures Definición de característica al serializar.
Ocho: SpringMVC integra FastJson
En el marco SpringMVC, la herramienta de serialización json predeterminada es jackson. Necesitamos configurar el convertidor de mensajes en el archivo de configuración SpringMVM y cambiar de jackson a FastJson.
-
Construcción del entorno
-
Crear un proyecto web
-
Importar paquetes jar dependientes relacionados
-
<!-- FastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- spring框架 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- springMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- spring jdbctemplate -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- 德鲁伊连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
</dependencies>
Configurar springmvc.xml
<mvc:annotation-driven>
<mvc:message-converters register-defaults="false">
<!-- FastJson的消息转换器-->
<bean id = "fastJson" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!-- FastJsonHttpMessageConverter类属性赋值-->
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>