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é?
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);
}
}
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"}