formato de análisis JSON

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();
    }
}

Aquí Insertar imagen Descripción
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();
}

Aquí Insertar imagen Descripción
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
Publicado 78 artículos originales · ganado elogios 2 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/Lucky_Boy_Luck/article/details/104732861
Recomendado
Clasificación