wake-up-neo.com

Java-Objekte mit Jackson in JSON konvertieren

Ich möchte, dass mein JSON so aussieht:

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

Code bisher:

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

}

und

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

Ich vermisse nur den Teil, wie ich das Java-Objekt mit Jackson in JSON konvertieren kann:

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

Meine Frage ist: Sind meine Klassen richtig? Welche Instanz muss ich aufrufen und wie kann ich diese JSON-Ausgabe erreichen?

126

So konvertieren Sie Ihre object in JSON mit Jackson:

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

Das könnte nützlich sein:

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));
16
Vicky

Ich weiß, das ist alt (und ich bin neu in Java), aber ich bin auf das gleiche Problem gestoßen. Und die Antworten waren mir nicht so klar wie ein Neuling ... also dachte ich, ich würde hinzufügen, was ich gelernt habe.

Ich habe eine Drittanbieter-Bibliothek verwendet, um das Unternehmen zu unterstützen: org.codehaus.jackson Alle Downloads hierfür finden Sie hier .

Für die Basis-JSON-Funktionalität müssen Sie den Bibliotheken Ihres Projekts die folgenden Glieder hinzufügen: jackson-mapper-asl und jackson-core-asl

Wählen Sie die Version, die Ihr Projekt benötigt. (Normalerweise können Sie mit dem neuesten stabilen Build arbeiten). 

Sobald sie in die Bibliotheken Ihres Projekts importiert wurden, fügen Sie Ihrem Code die folgenden import-Zeilen hinzu:

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

Mit dem Java-Objekt definierte und zugewiesene Werte, die Sie in JSON konvertieren und als Teil eines RESTful-Web-Services zurückgeben möchten

User u = new User();
u.firstName = "Sample";
u.lastName = "User";
u.email = "[email protected]";

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

Das Ergebnis sollte folgendermaßen aussehen: {"firstName":"Sample","lastName":"User","email":"[email protected]"}

15
f10orf12

mach das einfach

Gson gson = new Gson();
        return Response.ok(gson.toJson(yourClass)).build();
6
Shell Scott

Nun, selbst die akzeptierte Antwort gibt nicht genau aus, was Op verlangt hat. Es gibt den JSON-String aus, jedoch mit "-Zeichen. Obwohl es vielleicht ein bisschen spät ist, beantworte ich die Hoffnung, dass es den Menschen helfen wird! So mache ich es:

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
Ean V

Hinweis: Damit die am meisten gewählte Lösung funktioniert, müssen Attribute im POJO public sein oder ein öffentliches getter/setter haben

Standardmäßig funktioniert Jackson 2 nur mit Feldern, die entweder .__ sind. public oder über öffentliche Getter-Methoden - Serialisierung einer Entität, die hat alle Felder privat oder Paket privat wird fehlschlagen.

Noch nicht getestet, aber ich glaube, dass diese Regel auch für andere Json-Bibliotheken wie Google Gson gilt.

1
ZhaoGang

Sie können Google Gson wie folgt verwenden

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

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
0
Ven Ren

Sie könnten das tun:

String json = new ObjectMapper().writeValueAsString(yourObjectHere);