¿Cuáles son algunos consejos, trucos y errores al usar JSON desde Java?

No hay demasiados; JSON es una especificación simple. No creo que ninguno de estos sean específicos de Java. Agregaré más como pienso en ellos.

  • Este es el principal. Los objetos JSON están desordenados. No puede contar con el orden natural del texto JSON entrante que se conserva en el objeto JSON analizado. Tampoco puede asumir ningún orden al convertir un objeto analizado de nuevo en texto.
  • No puedes poner comentarios en JSON.
  • JSON no tiene soporte de formato de fecha.
  • La especificación no le dice qué tipo de número obtendrá. Por ejemplo, ¿es 1.0e1 un número entero, flotante o doble? Depende de la implementación.
  • Se supone que todas las cadenas se citan, aunque algunas implementaciones le permitirán evitar el no citar los nombres en un par nombre-valor.
  • Un número entre comillas es una cadena, no un número. Lo mismo para un booleano.
  • Los objetos y matrices JSON se pueden anidar a cualquier profundidad arbitraria. Recuerda que cuando escribes tu analizador recursivo.
  • XML es más rico que JSON, por lo que no se asignan limpiamente entre sí.
  • El primer carácter del texto JSON debe ser ‘[‘ o ‘{‘. Cualquier otra cosa es inválida. Los valores de cadena solo pueden existir como nombres o valores de objetos JSON y como valores de matriz JSON.

JSON solo tiene unos pocos tipos de colección.

El conjunto de objetos únicos es una cosa que falta notablemente en JSON. Los serializadores JSON como Jackson pueden tratar con la clase Set , pero el objeto se serializa como una matriz, de todos modos. Por lo tanto, el objeto JSON (en la web o en el cable) puede violar la singularidad del conjunto.

Si el objeto de transferencia de datos (DTO) tiene equals() y hashCode() definido para trabajar con Set , entonces el deserializador eliminará los duplicados y mantendrá solo el objeto único. Pero si no, entonces el Set resultante tendrá lo que parecen ser duplicados.

Puede ser mejor pasar una List lugar del serializador / deserializador y realizar las transformaciones para Set explícitamente. De lo contrario, será necesario definir equals() y hashCode , y es posible que esto no tenga sentido para los DTO.

en java

List list = mapper.readValue(jsonString,TypeFactory.defaultInstance().constructCollectionType(List.class, Employee.class));

– cuando se convierte un json a una lista de un determinado tipo de objeto, pero los pares de valores clave deben coincidir con los campos en Java, pero no es necesario tener todos los campos. vea aquí cómo convertir JSONArray a Lista de Objetos usando camel-jackson