java oggetto C'è un modo per convertire una mappa in una rappresentazione JSON usando Jackson senza scrivere in un file?




leggere riga da file java (2)

Sto cercando di usare Jackson per convertire una HashMap in una rappresentazione JSON.

Tuttavia, tutti i modi in cui ho visto coinvolgono la scrittura in un file e poi la lettura, che sembra davvero inefficiente. Mi stavo chiedendo se ci fosse comunque da fare direttamente?

Ecco un esempio di un'istanza in cui mi piacerebbe farlo

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

L'output sarebbe simile a questo

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

Fino ad ora, ogni esempio che ho trovato sull'utilizzo di ObjectMapper riguarda la scrittura su un file e la successiva lettura.

C'è una versione di Jackson di HashMap o Map di Java che funzionerà in modo simile a quello che ho implementato?


Answer #1

Passa la tua mappa a ObjectMapper.writeValueAsString(Object value)

È più efficiente dell'uso di StringWriter , secondo i documenti :

Metodo che può essere utilizzato per serializzare qualsiasi valore Java come stringa. Funzionalmente equivalente a chiamare writeValue (Writer, Object) con StringWriter e costruire String, ma più efficiente.

Esempio

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

Answer #2

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

produce

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






jackson