Подтвердить что ты не робот

Есть ли способ конвертировать карту в 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, которая будет работать аналогично тому, что я реализовал?

4b9b3361

Ответ 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"}