Есть ли способ конвертировать карту в JSON-представление с помощью Jackson без записи в файл?
Я пытаюсь использовать Jackson для преобразования HashMap в представление JSON.
Однако все способы, которые я видел, включают запись в файл, а затем чтение его, что кажется действительно неэффективным. Мне было интересно, если все-таки сделать это прямо?
Вот пример экземпляра, где я хотел бы сделать это
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;
}
}
Результат выглядит примерно так:
"partyInfo": {
"PARTY_NAME": "VSN",
"PARTY_ID": "92716518",
"PARTY_NUMBER": "92716518"
}
До сих пор каждый пример, с которым я столкнулся при использовании ObjectMapper
, включает запись в файл и последующее его чтение.
Есть ли версия Jackson для Java HashMap
или Map
, которая будет работать аналогично тому, что я реализовал?
Ответы
Ответ 1
Передайте свою карту в ObjectMapper.writeValueAsString(Object value)
Это более эффективно, чем использование StringWriter
, в соответствии с документами:
Метод, который может использоваться для сериализации любого значения Java как String. Функционально эквивалентно вызову writeValue (Writer, Object) с помощью StringWriter и построению String, но более эффективен.
Пример
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);
}
}
Ответ 2
Вы можете использовать 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());
}
}
производит
{"key2":"value2","key1":"value1"}