2013-07-23 10 views
30

Próbuję użyć Jackson do konwersji HashMap do reprezentacji JSON.Czy istnieje sposób przekonwertowania mapy na reprezentację JSON za pomocą Jacksona bez zapisywania do pliku?

Jednak wszystkie sposoby, jakie widziałem, obejmują pisanie do pliku, a następnie jego odczytywanie, co wydaje się naprawdę nieskuteczne. Zastanawiałem się, czy było tak, aby zrobić to bezpośrednio?

Oto przykład z sytuacją, gdy chciałbym zrobić to

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; 
    } 
} 

Wyjście będzie wyglądał jak ten

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

Dotychczas każdy przykład Natknąłem korzystania ObjectMapper polega na zapisywaniu pliku, a następnie jego odczytywaniu.

Czy istnieje wersja Javy w języku Java: HashMap lub Map, która działa w podobny sposób, jak zaimplementowałem?

+0

Możliwe duplikat [Zamiana Mapa JSON stosując Jackson] (http://stackoverflow.com/questions/29340383/convert-map-to-json-using-jackson) – Suma

Odpowiedz

63

Przeciągnij mapę, aby ObjectMapper.writeValueAsString(Object value)

Jest bardziej wydajny niż przy użyciu StringWriter, according to the docs:

metoda, która może być użyta do serializacji żadnej wartości Java jako Ciąg. Funkcjonalnie równoważne wywołaniu metody writeValue (Writer, Object) z StringWriter i konstrukcji String, ale bardziej wydajnej.

Przykład

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); 
    } 
} 
+0

dał ci czek, ponieważ dał bardziej efektywny sposób robienia tego – sreya

+0

@davnicwil Myślę, że powinien to być 'nowy ObjectMapper(). WriteValueAsString (mapa)' –

+0

@AllanRuin Dobre miejsce - edytowane :-) – davnicwil

7

Możesz użyć 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()); 
    } 
} 

produkuje

{"key2":"value2","key1":"value1"} 
+0

+1 że sposoby też działają :) – sreya

Powiązane problemy