Conversione di oggetti Java in JSON con Jackson


166

Voglio che il mio JSON assomigli a questo:

{
    "information": [{
        "timestamp": "xxxx",
        "feature": "xxxx",
        "ean": 1234,
        "data": "xxxx"
    }, {
        "timestamp": "yyy",
        "feature": "yyy",
        "ean": 12345,
        "data": "yyy"
    }]
}

Codice finora:

import java.util.List;

public class ValueData {

    private List<ValueItems> information;

    public ValueData(){

    }

    public List<ValueItems> getInformation() {
        return information;
    }

    public void setInformation(List<ValueItems> information) {
        this.information = information;
    }

    @Override
    public String toString() {
        return String.format("{information:%s}", information);
    }

}

e

public class ValueItems {

    private String timestamp;
    private String feature;
    private int ean;
    private String data;


    public ValueItems(){

    }

    public ValueItems(String timestamp, String feature, int ean, String data){
        this.timestamp = timestamp;
        this.feature = feature;
        this.ean = ean;
        this.data = data;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    public int getEan() {
        return ean;
    }

    public void setEan(int ean) {
        this.ean = ean;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return String.format("{timestamp:%s,feature:%s,ean:%s,data:%s}", timestamp, feature, ean, data);
    }
}

Mi manca solo la parte su come posso convertire l'oggetto Java in JSON con Jackson:

public static void main(String[] args) {
   // CONVERT THE JAVA OBJECT TO JSON HERE
    System.out.println(json);
}

La mia domanda è: le mie lezioni sono corrette? Quale istanza devo chiamare e come posso ottenere questo output JSON?


4
Il seguente tutorial potrebbe essere d'aiuto: mkyong.com/java/how-to-convert-java-object-to-from-json-jackson
maple_shaft

Grazie che mi ha aiutato :)
JustTheAverageGirl

se un'entità unì ad altri tavoli quindi seguire questo modo .. /programming/19928151/convert-entity-object-to-json/45695714#45695714
Sedat Y

Risposte:


417

Per convertire il tuo objectin JSON con Jackson:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

9
L'unica cosa è che la stringa esce sfuggita da ObjectWriter. Usa: nuovo JSONObject (ow.writeValueAsString (msg)) se viene inviato tramite servizi Web come RESTful.
jmarcosSF,

Per interesse perché non è os.writeValueAsJSONString (oggetto)?
DevilCode

3
Sto riscontrando questo errore, come risolvere con il tuo codice Nessun serializzatore trovato per la classe com.liveprocessor.LPClient.LPTransaction e nessuna proprietà scoperta per creare BeanSerializer (per evitare eccezioni, disabilitare SerializationFeature.FAIL_ON_EMPTY_BEANS))

11
librerie a proposito: import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter;
diego matos - keke,

objectDEVE avere getter per tutti i campi, che desideri includere nel tuo JSON.
Drakonoved,

25

So che questo è vecchio (e sono nuovo di Java), ma ho riscontrato lo stesso problema. E le risposte non erano chiare per me come un principiante ... quindi ho pensato di aggiungere ciò che ho imparato.

Ho usato una libreria di terze parti per aiutare lo sforzo: org.codehaus.jackson tutti i download per questo possono essere trovati qui .

Per la funzionalità JSON di base, è necessario aggiungere i seguenti vasetti alle librerie del progetto: jackson-mapper-asl e jackson-core-asl

Scegli la versione di cui il tuo progetto ha bisogno. (In genere puoi andare con l'ultima build stabile).

Una volta importati nelle librerie del tuo progetto, aggiungi le seguenti importrighe al tuo codice:

 import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import org.codehaus.jackson.map.ObjectMapper;

Con l'oggetto Java definito e assegnato i valori che si desidera convertire in JSON e restituire come parte di un servizio Web RESTful

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "sampleU@example.com";

ObjectMapper mapper = new ObjectMapper();

try {
    // convert user object to json string and return it 
    return mapper.writeValueAsString(u);
}
catch (JsonGenerationException | JsonMappingException  e) {
    // catch various errors
    e.printStackTrace();
}

Il risultato dovrebbe apparire così: {"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}


Credo che le righe 'import' siano cambiate in "import com.fasterxml.jackson.databind.ObjectMapper;"
barrypicker,

16

Questo potrebbe essere utile:

objectMapper.writeValue(new File("c:\\employee.json"), employee);

// display to console
Object json = objectMapper.readValue(
     objectMapper.writeValueAsString(employee), Object.class);

System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
     .writeValueAsString(json));

10

fai questo

 for jackson it's
         ObjectMapper mapper = new ObjectMapper();  
         return mapper.writeValueAsString(object);
         //will return json in string


 for gson it's:
            Gson gson = new Gson();
            return Response.ok(gson.toJson(yourClass)).build();

Che cos'è Response.ok?
Codeversed

Ho avuto un problema con le dimensioni JSON inserite in mongoDB erano al di sopra del limite consentito, quando accendo il mio oggetto Gson ha dimensioni maggiori rispetto a Jackson. Solo un consiglio
Daniela Morais,

14
La domanda riguarda jackson: nonGson
Ean V

2
@Codeversed Response è una classe nella libreria Jersey. Response.ok restituirà la risposta JSON con codice di stato 200.
Pranav,

2

Bene, anche la risposta accettata non produce esattamente ciò che op ha richiesto. Emette la stringa JSON ma con "caratteri di escape. Quindi, anche se potrebbe essere un po 'in ritardo, sto rispondendo sperando che possa aiutare le persone! Ecco come lo faccio:

StringWriter writer = new StringWriter();
JsonGenerator jgen = new JsonFactory().createGenerator(writer);
jgen.setCodec(new ObjectMapper());
jgen.writeObject(object);
jgen.close();
System.out.println(writer.toString());


2

Nota: per far funzionare la soluzione più votata, gli attributi nel POJO devono essere publico avere un pubblico getter/ setter:

Per impostazione predefinita, Jackson 2 funzionerà solo con campi pubblici o con un metodo getter pubblico: la serializzazione di un'entità con tutti i campi privati ​​o privati ​​del pacchetto fallirà.

Non ancora testato, ma credo che questa regola si applichi anche ad altre librerie JSON come Google Gson.


0
public class JSONConvector {

    public static String toJSON(Object object) throws JSONException, IllegalAccessException {
        String str = "";
        Class c = object.getClass();
        JSONObject jsonObject = new JSONObject();
        for (Field field : c.getDeclaredFields()) {
            field.setAccessible(true);
            String name = field.getName();
            String value = String.valueOf(field.get(object));
            jsonObject.put(name, value);
        }
        System.out.println(jsonObject.toString());
        return jsonObject.toString();
    }


    public static String toJSON(List list ) throws JSONException, IllegalAccessException {
        JSONArray jsonArray = new JSONArray();
        for (Object i : list) {
            String jstr = toJSON(i);
            JSONObject jsonObject = new JSONObject(jstr);
            jsonArray.put(jsonArray);
        }
        return jsonArray.toString();
    }
}

Troppo lavoro, troppa riflessione! I mapper dovrebbero liberarti dal fare queste cose sulla piastra!
Ean V,

3
Adoro i convettori!
Christos,

0

Puoi utilizzare Google Gson in questo modo

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.