web-dev-qa-db-fra.com

Existe-t-il un moyen de convertir une carte en représentation JSON à l'aide de Jackson sans écrire dans un fichier?

J'essaie d'utiliser Jackson pour convertir un HashMap en une représentation JSON.

Cependant, toutes les façons que j'ai vues impliquent d'écrire dans un fichier puis de le relire, ce qui semble vraiment inefficace. Je me demandais s'il y avait de toute façon à le faire directement?

Voici un exemple d'une instance où j'aimerais le faire

public static Party readOneParty(String partyName) {
  Party localParty = new Party();
  if(connection==null) {
    connection = new DBConnection();
  } try {
    String query = "SELECT * FROM PureServlet WHERE PARTY_NAME=?";
    ps = con.prepareStatement(query);
    ps.setString(1, partyName);
    resultSet = ps.executeQuery();
    meta = resultSet.getMetaData();
    String columnName, value;
    resultSet.next();
    for(int j=1;j<=meta.getColumnCount();j++) { // necessary to start at j=1 because of MySQL index starting at 1
      columnName = meta.getColumnLabel(j);
      value = resultSet.getString(columnName);
      localParty.getPartyInfo().put(columnName, value); // this is the hashmap within the party that keeps track of the individual values. The column Name = label, value is the value
    }
  }
}

public class Party {

  HashMap <String,String> partyInfo = new HashMap<String,String>();

  public HashMap<String,String> getPartyInfo() throws Exception {
    return partyInfo;
  }
}

La sortie ressemblerait à quelque chose comme ceci

"partyInfo": {
  "PARTY_NAME": "VSN",
  "PARTY_ID": "92716518",
  "PARTY_NUMBER": "92716518"
}

Jusqu'à présent, chaque exemple que j'ai rencontré en utilisant ObjectMapper implique d'écrire dans un fichier puis de le relire.

Existe-t-il une version Jackson de HashMap ou Map de Java qui fonctionnera de manière similaire à ce que j'ai implémenté?

33
user2494770

Passez votre carte à ObjectMapper.writeValueAsString(Object value)

C'est plus efficace que d'utiliser StringWriter, selon la documentation :

Méthode qui peut être utilisée pour sérialiser n'importe quelle valeur Java en tant que chaîne. Fonctionnellement équivalente à l'appel de writeValue (Writer, Object) avec StringWriter et à la construction de String, mais plus efficace.

Exemple

import org.codehaus.jackson.map.ObjectMapper;
import Java.io.IOException;
import Java.util.HashMap;
import Java.util.Map;

public class Example {

    public static void main(String[] args) throws IOException {
        Map<String,String> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");

        String mapAsJson = new ObjectMapper().writeValueAsString(map);
        System.out.println(mapAsJson);
    }
}
68
davnicwil

Vous pouvez utiliser un StringWriter.

package test;

import com.fasterxml.jackson.databind.ObjectMapper;

import Java.io.IOException;
import Java.io.StringWriter;
import Java.util.HashMap;
import Java.util.Map;

public class StringWriterExample {

    private static ObjectMapper objectMapper = new ObjectMapper();

    public static void main(String[] args) throws IOException {

        Map<String,String> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");

        StringWriter stringWriter = new StringWriter();

        objectMapper.writeValue(stringWriter, map);

        System.out.println(stringWriter.toString());
    }
}

produit

{"key2":"value2","key1":"value1"}
8
Emerson Farrugia