2013-07-23 6 views
30

HashMap'i JSON temsiline dönüştürmek için Jackson'ı kullanmaya çalışıyorum. Bununla birlikte, gördüğüm tüm yollar bir dosyaya yazmayı ve daha sonra tekrar okuma yapmayı gerektiriyor ki bu da gerçekten verimsiz gibi görünüyor. Bunu yapmak için zaten var mıydı acaba? İşte Bir dosyayı bir dosyaya yazmadan Jackson'ı kullanarak JSON temsiline dönüştürmenin bir yolu var mı?

Ben

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

çıktı ben kullanmanın karşılaşanlar bu

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

Şimdiye kadar her örnek benzer görünümde olacaktır yapmak istediğiniz bir örneğinin bir örnek ObjectMapper, bir dosyaya yazmayı ve daha sonra okuyamayı içerir.

Java'nın HashMap veya Map'un bir Jackson sürümü var, benim uygulamamın benzeri bir şekilde çalışacak mı?

+0

Olası kopyalar http://stackoverflow.com/questions/29340383/convert-map-to-json-using-jackson) – Suma

cevap

63

StringWriter kullanmaktan daha ObjectMapper.writeValueAsString(Object value)

Bu daha verimlidir için Harita geçmek üretir according to the docs: gibi herhangi bir Java değerini seri hale getirmek için kullanılabilir

Yöntemi dizi. StringWriter ile writeValue (Writer, Object) çağırma ve String oluşturma, ancak daha verimli işlevsel olarak eşdeğerdir.

Örnek

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); 
    } 
} 
([Jackson kullanarak JSON için Harita dönüştürme] arasında
+0

bunu daha verimli bir şekilde verdiğinden dolayı kontrolü verdi çünkü – sreya

+0

@davnicwil Yeni NesneMapper(). WriteValueAsString (map) ' –

+0

@AllanRuin Good spot - edited :-) – davnicwil

7

Bir StringWriter kullanabilirsiniz.

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

,

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

+1 bu şekilde çok çalışıyor :) – sreya