J'essaye de faire quelque chose comme ça mais ça ne marche pas:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Mais l'IDE dit:
Affectation non cochée
Map to Map<String,String>
Quelle est la bonne façon de procéder? J'utilise uniquement Jackson parce que c'est ce qui est déjà disponible dans le projet, existe-t-il un moyen Java natif de convertir vers / depuis JSON?
En PHP, je voudrais simplement json_decode($str)
et je récupérerais un tableau. J'ai besoin fondamentalement de la même chose ici.
Réponses:
J'ai le code suivant:
Il lit à partir d'un fichier, mais
mapper.readValue()
accepte également unInputStream
et vous pouvez obtenir un àInputStream
partir d'une chaîne en utilisant ce qui suit:Il y a un peu plus d'explications sur le mappeur sur mon blog .
la source
JsonFactory
n'est pas nécessaire.ObjectMapper
peut le créer automatiquement seul.Map<String, String>
et vous avez fourniMap<String, Object>
.mapper.writeValueAsString(hashmap)
Essayez
TypeFactory
. Voici le code pour Jackson JSON (2.8.4).Voici le code d'une ancienne version de Jackson JSON.
la source
L'avertissement que vous obtenez est fait par le compilateur, pas par la bibliothèque (ou la méthode utilitaire).
Le moyen le plus simple d'utiliser directement Jackson serait:
La méthode utilitaire que vous appelez fait probablement quelque chose de similaire.
la source
Map<String, String>
et vous avez fourniMap<String, Object>
.Notez que cette
reader
instance est Thread Safe.la source
Map<String, String>
et vous avez fourniMap<String, Object>
.Conversion de chaîne en carte JSON:
la source
Type safety: The expression of type HashMap needs unchecked conversion to conform to Map<String,String>
. Bien que cela puisse être supprimé avec une@SuppressWarnings
annotation, je vous recommande d'utiliser leTypeReference
premier ou le casting suivant, comme mentionné par Staxmanmap = mapper.readValue(string, map.getClass());
- étant donné que vous avez instancié la carte, comme c'est le cas ici.Je pense que cela résoudra votre problème.
la source
Ce qui suit fonctionne pour moi:
où
getJsonAsMap
est défini comme ceci:Notez que cela va échouer si vous avez des objets enfants dans votre JSON (parce qu'ils ne sont pas un
String
, ils sont une autreHashMap
), mais ne fonctionnera que si votre JSON est une liste de valeurs clé des propriétés comme ceci:la source
Utilisation du Gson de Google
Pourquoi ne pas utiliser le Gson de Google comme mentionné ici ?
Très simple et a fait le travail pour moi:
la source
Voici la solution générique à ce problème.
J'espère qu'un jour quelqu'un penserait à créer une méthode util pour convertir en n'importe quel type de carte clé / valeur, d'où cette réponse :)
la source
je voulais juste donner une réponse à Kotlin
la source