218 votes

Comment convertir une chaîne JSON en une carte <String, String> avec Jackson JSON

C'est ma première fois d'essayer de faire quelque chose d'utile avec Java.. Je suis en train de faire quelque chose comme ça, mais ça ne fonctionne pas:

Map<String, String> propertyMap = new HashMap<String, String>();

propertyMap = JacksonUtils.fromJSON(properties, Map.class);

Mais l'IDE dit: 'non Cochée cession Map to Map<String,String>'

Quelle est la bonne façon de le faire? Je suis le seul à l'aide de Jackson parce que c'est ce qui est déjà disponible dans le projet, est-il un natif Java qui permet de convertir vers/à partir de JSON?

En PHP, je voudrais simplement json_decode($str) , et je serais de retour dans un tableau. J'ai besoin fondamentalement la même chose ici.

Merci!

360voto

djna Points 34761

J'ai un code de ce genre

 public void testJackson() throws IOException {        
    JsonFactory factory = new JsonFactory(); 
    ObjectMapper mapper = new ObjectMapper(factory); 
    File from = new File("albumnList.txt"); 
    TypeReference<HashMap<String,Object>> typeRef 
            = new TypeReference<HashMap<String,Object>>() {};

    HashMap<String,Object> o = mapper.readValue(from, typeRef); 
    System.out.println("Got " + o); 
}   
 

C'est la lecture d'un fichier, mais mapper.readValue() acceptera également un InputStream et vous pourrez obtenir un InputStream d'une chaîne en utilisant ceci:

 new ByteArrayInputStream(astring.getBytes("UTF-8")); 
 

Il y a un peu plus d'explication du mappeur sur mon blog .

61voto

Sun Ning Points 898

Essayez TypeFactory

 Map<String, String> result = new ObjectMapper().readValue(
    data, TypeFactory.mapType(HashMap.class, String.class, String.class));
 

29voto

StaxMan Points 34626

L'avertissement que vous obtenez est fait par compilateur, pas par bibliothèque (ou méthode utilitaire).

Le moyen le plus simple d’utiliser Jackson directement serait:

 HashMap<String,Object> props;

// src is a File, InputStream, String or such
props = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});
// or:
props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);
// or even just:
@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmless
props = new ObjectMapper().readValue(src, HashMap.class);
 

La méthode utilitaire que vous appelez fait probablement quelque chose de similaire à ceci.

10voto

Raja Points 81

Conversion de chaîne en carte JSON:

 Map<String,String> map = new HashMap<String,String>();

ObjectMapper mapper = new ObjectMapper();

map = mapper.readValue(string, HashMap.class);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X