Estoy tratando de hacer algo como esto pero no funciona:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Pero el IDE dice:
Asignación no verificada
Map to Map<String,String>
¿Cuál es la forma correcta de hacer esto? Solo estoy usando Jackson porque eso es lo que ya está disponible en el proyecto, ¿hay una forma nativa de Java de convertir a / desde JSON?
En PHP simplemente json_decode($str)
lo haría y obtendría una matriz. Necesito básicamente lo mismo aquí.
Respuestas:
Tengo el siguiente código:
Está leyendo desde un archivo, pero
mapper.readValue()
también aceptará unInputStream
y puede obtener unoInputStream
de una cadena usando lo siguiente:Hay un poco más de explicación sobre el mapeador en mi blog .
fuente
JsonFactory
no es necesaria.ObjectMapper
puede crearlo automáticamente por sí solo.Map<String, String>
y usted lo ha proporcionadoMap<String, Object>
.mapper.writeValueAsString(hashmap)
Tratar
TypeFactory
. Aquí está el código para Jackson JSON (2.8.4).Aquí está el código para una versión anterior de Jackson JSON.
fuente
La advertencia que obtienes se realiza por compilador, no por biblioteca (o método de utilidad).
La forma más sencilla de usar Jackson directamente sería:
El método de utilidad que llamas probablemente solo hace algo similar a esto.
fuente
Map<String, String>
y usted ha proporcionadoMap<String, Object>
.Tenga en cuenta que la
reader
instancia es segura para subprocesos.fuente
Map<String, String>
y usted proporcionóMap<String, Object>
.Conversión de Cadena a Mapa JSON:
fuente
Type safety: The expression of type HashMap needs unchecked conversion to conform to Map<String,String>
. Si bien esto se puede suprimir con@SuppressWarnings
anotaciones, recomendaría usarTypeReference
primero o lanzar después como lo menciona Staxmanmap = mapper.readValue(string, map.getClass());
, dado que ha instanciado el mapa, como es el caso aquí.Creo que esto resolverá tu problema.
fuente
Lo siguiente funciona para mí:
donde
getJsonAsMap
se define así:Tenga en cuenta que esto va a fallar si tiene objetos secundarios en su JSON (porque no son una
String
, son otroHashMap
), pero funcionará si su JSON es una lista de valores clave de las propiedades, así:fuente
Usando el Gson de Google
¿Por qué no usar Google's Gson como se menciona aquí ?
Muy sencillo e hizo el trabajo por mí:
fuente
Aquí está la solución genérica a este problema.
Espero que algún día alguien piense crear un método util para convertir a cualquier tipo de clave / valor del mapa, de ahí esta respuesta :)
fuente
solo quería dar una respuesta a Kotlin
fuente