Enumeración a JSON o mapa o lista de objetos

Registre el proceso de conversión, los problemas encontrados y las soluciones. Quieres convertir a JSONObject o map porque no quieres crear una nueva clase. Esta es una solución temporal. Si lo que desea convertir es un objeto, simplemente cambie el paso del mapa en el medio al tipo que necesita.

Primero, la
clase de enumeración de datos original

public enum TypeEnum {
    
    

    QUESTION(1, "问题"),

    ANSWER(2, "回答"),

    COMMENT(3, "评论"),

    NICK(4, "昵称");
    
    private final int value;

    private final String name;

    TypeEnum(int value, String name) {
    
    
        this.value = value;
        this.name = name;
    }
    
    public int getValue() {
    
    
        return value;
    }

    public String getName() {
    
    
        return name;
    }
}

2. Datos objetivo

[
    {
    
    
        "id":1,
        "name":"问题"
    },
    {
    
    
        "id":2,
        "name":"回答"
    },
    {
    
    
        "id":3,
        "name":"评论"
    },
    {
    
    
        "id":4,
        "name":"昵称"
    }
]

Tres, el código de conversión real

List<JSONObject> list = Stream.of(TypeEnum.values())
                .sorted(Comparator.comparing(TypeEnum::getType))
                .map(item -> new JSONObject(new LinkedHashMap())
                        .fluentPut("id", item.getType())
                        .fluentPut("name", item.getName()))
                .collect(Collectors.toList());
  1. Por qué agregar sorting. Sorted (Comparator.comparing (TypeEnum :: getType))
    Quiero que el resultado de salida esté en orden ascendente de acuerdo con el valor de la enumeración.
    Si no ordena, los datos serán desordenados y el resultado puede ser el siguiente, lo que no es conveniente para usted y el front-end para verificar los datos.
[{
    
    "id":1,"name":"问题"},{
    
    "id":4,"name":"昵称"},{
    
    "id":3,"name":"评论"},{
    
    "id":2,"name":"回答"}]
  1. ¿Por qué agregar un nuevo LinkedHashMap () a un nuevo JSONObject ()?
    Veamos el código fuente.
    Inserte la descripción de la imagen aquí
    Si ingresa directamente un nuevo JSONObject (), el valor predeterminado es ningún método de construcción de parámetros y el medio ordenado = falso, siga la lógica siguiente. La capa inferior es para almacenar datos en HashMap , HashMap no tiene orden.
    como
JSONObject jsonObject = new JSONObject();
jsonObject.put("id", 1);
jsonObject.put("name", "张三");

De hecho, no los puso en el orden en que los puso. Vea los resultados a continuación.

{
    
    
    "name":"张三",
    "id":1
}

Para resolver este problema, especifiqué la estructura de datos subyacente para usar LinkedHashMap para almacenar los datos json

Supongo que te gusta

Origin blog.csdn.net/weixin_43075027/article/details/112957021
Recomendado
Clasificación