Table des matières
Un : régression du format de données JSON
4. Format imbriqué de l'objet tableau
Deux : Introduction à FastJson
Trois : API de sérialisation FastJson
Quatre : API de désérialisation FashJson
Cinq : énumération SerializerFeature
Huit : SpringMVC intègre FastJson
Un : régression du format de données JSON
1. Qu'est-ce que JSON ?
JSON : (JavaScript Object Notation, JS Object Notation) est un format d'échange de données léger. Il est basé sur un sous-ensemble d'ECMAScript (la spécification js développée par l'European Computer Association) et utilise un format de texte totalement indépendant du langage de programmation pour stocker et représenter les données. La simplicité et la clarté de la hiérarchie font de JSON un langage d'échange de données idéal. Il est facile à lire et à écrire pour les gens, et il est également facile pour les machines à analyser et à générer, et il peut améliorer efficacement l'efficacité de la transmission du réseau. Actuellement, JSON est le roi des langages d'échange de données.
2. Format de tableau Json
Les données de Json elles-mêmes sont un tableau, entouré de crochets, et les éléments du tableau sont séparés par des virgules. Il n'y a aucune restriction sur le type de données des éléments du tableau.
var jsonArray = ["元素1","元素2","元素3"]; //定义数组格式json
console.log(jsonArray[0]); //访问json数组的元素
for(var i = 0 ; i < jsonArray.length ; i++){
console.log(jsonArray[i]); //遍历数组,访问每个元素
}
3. Format d'objet Json
Les données de Json elles-mêmes sont un objet, entouré d'accolades. L'objet est stocké sous la forme de paires clé-valeur, la clé est fixée en tant que type de chaîne et la valeur est n'importe quel type de données. La clé et la valeur sont séparées par un côlon.
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定义对象格式json
console.log(jsonObject.k1); //取出键k1对应的值
4. Format imbriqué de l'objet tableau
① : Les éléments du tableau sont des objets
var jsonArray = [
{"k1":"v1"},{"k2":"v2"}
]; // 定义数组格式json,数组元素是对象
console.log(jsonArray[0].k1); //访问数组0索引的元素,该元素的键k1对应的值
② : La valeur dans l'objet est un tableau
var jsonObject = {
"k1":["元素1","元素2"],
"k2":["元素1","元素2"]
}; // 定义对象格式json,键是字符串类型,值是数组
console.log(jsonObject.k1[0]); //访问对象的键是k1,对于的值为数组,数组的0索引元素
③ : Il y a moi en toi et toi en moi
var json = {
"k1":[
"元素1",{"key1":"value1"},{"key2":"value2"}
],
"k2":[
{"key1":"value1"}
]
}; //定义对象格式json,键是字符串,值是数组,数组的元素是对象
console.log(json.k1[1].key1); //访问json对象的键k1,对应的是数组,访问数组的1索引,数组的1索引上的元素是对象,访问key1键对应的值
Deux : Introduction à FastJson
FastJson est la bibliothèque d'analyse JSON open source d'Alibaba, qui peut analyser des chaînes au format JSON, prendre en charge la sérialisation de Java Beans en chaînes JSON et désérialiser des chaînes JSON en JavaBean.
Avantages de Fastjson
-
Comparé à d'autres bibliothèques JSON, fastjson est rapide.Depuis la sortie de fastjson version 1.1.x en 2011, ses performances n'ont jamais été surpassées par d'autres bibliothèques JSON implémentées en Java .
-
Fastjson largement utilisé est utilisé à grande échelle dans Alibaba et déployé sur des dizaines de milliers de serveurs Fastjson est largement accepté dans l'industrie. En 2012, il a été sélectionné comme l'un des logiciels open source nationaux les plus populaires par Open Source China.
-
Test complet fastjson a beaucoup de cas de test, dans la version 1.2.11, il y a plus de 3321 cas de test. Des tests de régression sont effectués pour chaque version afin de garantir une qualité stable.
-
L'API utilisant fastjson simple est très concise.
-
La fonctionnalité complète prend en charge les génériques, prend en charge le traitement de flux de textes volumineux, prend en charge l'énumération et prend en charge les extensions de sérialisation et de désérialisation.
Trois : API de sérialisation FastJson
Sérialisation : fait référence au processus de conversion d'objets Java en chaînes au format json. Les objets JavaBean, les objets de collection List et les collections Map sont les plus largement utilisés.
-
JSON.toJSONStringJSON.toJSONString
-
Sérialiser les objets 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.toJSONStringJSON.toJSONString
-
Sérialiser la collection 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.toJSONStringJSON.toJSONString
-
Sérialiser la collection Map
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);
}
Quatre : API de désérialisation FashJson
JSON.parseObject
-
Désérialiser les objets 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
-
Désérialiser la collection 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
-
Désérialiser la collection Map
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));
}
}
Cinq : énumération SerializerFeature
Cette énumération prend en charge certaines définitions de données caractéristiques pour la sérialisation.
-
La constante d'énumération WriteMapNullValue est sérialisée en tant que champ nul
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);
}
Le champ WriteNullStringAsEmpty de la constante d'énumération est nul, sérialisé sous la forme ""
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);
}
Le champ de la constante d'énumération WriteNullNumberAsZero est nul, sérialisé en tant que 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);
}
-
La valeur du champ Constante d'énumération WriteNullBooleanAsFalse est nulle et la sortie est fausse
-
Format de date formaté de la constante d'énumération WriteDateUseDateFormat
-
Constante d'énumération Sortie au format PrettyFormat
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);
}
Six : annotation @JSonField
Cette annotation agit sur les méthodes, les champs et les paramètres. Elle peut être personnalisée pour les caractéristiques et les fonctions lors de la sérialisation et de la désérialisation.
-
Attribut d'annotation : name Le nom après la sérialisation
-
Attribut d'annotation : ordre sérialisé ordinal
-
Attribut d'annotation : format format après sérialisation
-
Attribut d'annotation : si serialize sérialise le champ
-
Attribut d'annotation : deserialize Indique s'il faut désérialiser le champ
-
Attribut d'annotation : serialzeFeatures Définition de la fonctionnalité lors de la sérialisation
Sept : annotation @ JSonType
Cette annotation agit sur la classe pour personnaliser la fonction de fonctionnalité lors de la sérialisation et de la désérialisation des champs de la classe.
-
Attribut d'annotation : inclut les champs à sérialiser.
-
Attribut d'annotation : commandes La commande après sérialisation.
-
Attribut d'annotation : serialzeFeatures Définition de la fonctionnalité lors de la sérialisation.
Huit : SpringMVC intègre FastJson
Dans le framework SpringMVC, l'outil de sérialisation json par défaut est jackson.Nous devons configurer le convertisseur de message dans le fichier de configuration SpringMVM et passer de jackson à FastJson.
-
Construction de l'environnement
-
Créer un projet Web
-
Importer les packages jar dépendants associés
-
<!-- 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>
Configurer 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>