1. ¿Qué es JSON
JSON es una estructura de datos XML sustituido, y en comparación con XML, pero es más compacto y no describe capacidad diferencial, debido a su pequeño reduciendo así el tráfico de la red para que la velocidad más tráfico.
JSON es sólo un montón de elementos de cadena utilizará signos específicos tiempo.
Bis {} paréntesis indican el objeto
array [] en paréntesis indican
"" es entre comillas o valor de atributo
: representa el colon, que es el valor anterior (este valor puede ser una cadena, un número, o puede ser otra matriz u objeto)
Por lo tanto, { "name": "Michael"} puede ser entendido como un nombre para el objeto que contiene el Michael
2.Json cuatro formas de resolver
2.1 forma tradicional JSON
Importación dependencia:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
clase de entidad en la cadena JSON
clases de entidad:
public class User {
private Integer age;
private String name;
private String password;
public User() {}
public User(Integer age, String name, String password) {
this.age = age;
this.name = name;
this.password = password;
}
}
categorías de prueba JSON:
public class JsonTest {
/**
* 传统方式解析:实体类转换为Json格式字符串
*/
private static void tranBeanToJson() {
User user = new User(18, "zzc", "666");
JSONObject json = new JSONObject();
json.put("age", user.getAge());
json.put("name", user.getName());
json.put("password", user.getPassword());
System.out.println(json.toString());
}
/**
* 传统方式解析
*/
public static void tranditioalResolve() {
tranBeanToJson();
}
public static void main(String[] args) {
tranditioalResolve();
}
}
cadena JSON en una clase de entidad de formato
/**
* 传统方式解析:Json格式字符串转换为实体类
*/
private static void tranJsonToBean() {
String jsonStr = "{\"age\" :20, \"name\": \"zzc\", \"password\": \"123\"}";
JSONObject json = JSONObject.fromObject(jsonStr);
User user = (User) json.toBean(json, User.class);
System.out.println(user);
}
public static void tranditioalResolve() {
//tranBeanToJson();
tranJsonToBean();
}
Si la cadena contiene una matriz JSON
Agregue la clase Dirección:
public class Address {
private String province;
private String city;
private String block;
private Integer street;
public Address() {}
public Address(String province, String city, String block, Integer street) {
this.province = province;
this.city = city;
this.block = block;
this.street = street;
}
}
Y la clase como una propiedad de la clase de direcciones del usuario. Modificar la clase Usuario:
public class User {
private Integer age;
private String name;
private String password;
// 一个用户可以有多个地址
private List<Address> addressList;
}
private static void tranJsonToBean() {
String jsonStr = "{\"age\":20, \"name\":\"zzc\", \"password\":\"123\", \"addressList\":" +
"[{\"province\": \"湖北省\", \"city\":\"武汉市\", \"block\":\"东西湖区\", \"street\": \"556\"}," +
"{\"province\": \"黑龙江省\", \"city\":\"哈尔滨市\", \"block\":\"道里区\", \"street\": \"36\"}]}";
JSONObject json = JSONObject.fromObject(jsonStr);
Map classMap = new HashMap<>();
classMap.put("addressList", Address.class);
User user = (User) json.toBean(json, User.class, classMap);
System.out.println(user);
}
AddressList anterior es una matriz. En este caso, la necesidad de ensamblar un mapa. De esta manera, se asignó AddressList objeto de propiedad del usuario a.
También se pueden obtener por el valor método AddressList getJSONArray () Método:
JSONArray addressList = json.getJSONArray("addressList");
System.out.println(addressList);
2.2Jackson camino
Importación dependencia:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
clase de entidad en un formato JSON
private static void jacksonBeanToJson() throws Exception{
User user = new User(18, "zzc", "666");
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(user);
System.out.println(jsonStr);
}
public static void jacksonResolve() {
try {
jacksonBeanToJson();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
jacksonResolve();
}
cadena JSON en una clase de entidad de formato
private static void jacksonJsonToBean() throws Exception{
String jsonStr = "{\"age\" :20, \"name\": \"zzc\", \"password\": \"123\"}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(jsonStr, User.class);
System.out.println(user);
}
determinación 2.3Gson
Importación dependencia:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
clase de entidad en un formato JSON
private static void gsonBeanToJson() {
User user = new User(18, "zzc", "666");
Gson gson = new Gson();
String jsonStr = gson.toJson(user);
System.out.println(jsonStr);
}
cadena JSON en una clase de entidad de formato
private static void gsonJsonToBean() {
String jsonStr = "{\"age\" :20, \"name\": \"zzc\", \"password\": \"123\"}";
Gson gson = new Gson();
User user = gson.fromJson(jsonStr, User.class);
System.out.println(user);
}
determinación 2.4fastjson
Importación dependencia:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
clase de entidad en un formato JSON
private static void fastJsonBeanToJson() {
User user = new User(18, "zzc", "666");
Object jsonStr = JSON.toJSON(user);
System.out.println(jsonStr);
}
cadena JSON en una clase de entidad de formato
private static void fastJsonToBean() {
String jsonStr = "{\"age\" :20, \"name\": \"zzc\", \"password\": \"123\"}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user);
}
3. Comparación de los cuatro tipos de métodos analíticos
Manera de resolver las diferencias
3.1json-lib
JSON-lib el principio, es el más ampliamente utilizado herramienta analítica JSON, JSON es un mal lugar realmente depende de muchos paquetes de terceros (incluyendo Commons-beanutils.jar, commons-collections-3.2.jar, commons-lang 2.6.jar, commons-logging-1.1.1.jar, ezmorph-1.0.6.jar) para el tipo complejo de la conversión, JSON-lib convierte en frijol json defectos allí, como ocurrir dentro de una clase de otra clase lista o conjunto de mapas, problema JSON-lib surge de frijol a la conversión JSON.
JSON-lib en la función y el rendimiento de los anteriores no puede satisfacer las necesidades de Internet ahora.
3.2 de código abierto Jackson
En comparación marco de JSON-lib, paquete frasco de Jackson depende menos fácil de usar y el rendimiento debe ser relativamente mayor. Y la comunidad de Jackson es relativamente activa, la velocidad es más rápida.
Jackson causan problemas de frijol complejo de tipo JSON de conversión, una colección de Mapa, Lista de los problemas de conversión. Para Jackson tipos complejos de convertir grano de JSON, convertir JSON formato JSON en lugar del formato estándar
3.3Google 的 Gson
Gson es el más versátil artefactos de aplicación El análisis de JSON .Gson principalmente dos funciones de conversión toJSON y fromJson, sin dependencia, sin excepciones tarro adicional, se pueden ejecutar directamente en JDK. Mientras la clase que conseguir y métodos de ajuste, pudiendo Gson tipo complejo o grano a grano a la conversión JSON JSON es JSON análisis sintáctico artefacto.
Gson en el impecable función anterior, pero la diferencia de rendimiento un poco por encima de lo FastJson.
3,4 Alibaba FastJson
Fastjson lenguaje Java está escrito en un procesador JSON de alto rendimiento, desarrollado por Alibaba. Ninguna dependencia, no es una excepción frasco adicional, puede ser directamente ejecutado en JDK.
FastJson aparecerá en un tipo complejo de la haba de convertir Json algunos de los problemas, se puede producir el tipo de referencia, resultando error de conversión Json, la necesidad de referencia.
FastJson utilizando el algoritmo original, analizará la velocidad al extremo, más que toda la biblioteca JSON.
tipo de análisis | Ventajas y desventajas |
---|---|
JSON-lib | los datos JSON en un complejo defectos clase entidad, su rendimiento y funcionalidad inadecuada |
Jackson | los datos JSON en una clase de entidad compleja defectuosos, el rendimiento y la funcionalidad de manera convencional |
Gson | Función en el rendimiento de varias maneras óptimas tan buena como la forma en Jackson |
Fast JSON | Defectuoso compleja clase de entidad JSON convierte en datos, análisis de velocidad que de otro modo JSON |