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á unInputStreamy puede obtener unoInputStreamde una cadena usando lo siguiente:Hay un poco más de explicación sobre el mapeador en mi blog .
fuente
JsonFactoryno es necesaria.ObjectMapperpuede 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
readerinstancia 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@SuppressWarningsanotaciones, recomendaría usarTypeReferenceprimero 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
getJsonAsMapse 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