Java-objecten converteren naar JSON met Jackson

Ik wil dat mijn JSON er zo uitziet:

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

Code tot nu toe:

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

en

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

Ik mis gewoon het onderdeel Hoe ik het Java-object naar JSON kan converteren met Jackson:

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

Mijn vraag is: zijn mijn klassen correct? Welk exemplaar moet ik bellen en hoe ik deze JSON-uitgang kan bereiken?


1, Autoriteit 100%

Om uw objectin JSON met Jackson te converteren:

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.databind.ObjectWriter; 
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);

2, Autoriteit 7%

Ik weet dat dit oud is (en ik ben nieuw voor Java), maar ik kwam hetzelfde probleem tegen. En de antwoorden waren niet zo duidelijk voor mij als een newbie … dus ik dacht dat ik zou toevoegen wat ik heb geleerd.

Ik heb een bibliotheek van derden gebruikt om te helpen bij het streven: org.codehaus.jackson
Alle downloads hiervoor is te vinden hier .

Voor Base JSON-functionaliteit moet u de volgende potten toevoegen aan de bibliotheken van uw project:
jackson-mapper-ASL ​​
en
jackson-core-asl

Kies de versie die uw project nodig heeft. (Normaal gesproken kun je kiezen voor de nieuwste stabiele build).

Zodra ze zijn geïmporteerd in de bibliotheken van uw project, voegt u de volgende import-regels toe aan uw code:

import org.codehaus.jackson.JsonGenerationException;
 import org.codehaus.jackson.map.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;

Met het Java-object gedefinieerde en toegewezen waarden die u naar JSON wilt converteren en retourneren als onderdeel van een RESTful-webservice

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

Het resultaat zou er als volgt uit moeten zien:
{"firstName":"Sample","lastName":"User","email":"[email protected]"}


Antwoord 3, autoriteit 3%

Dit kan handig zijn:

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

4, Autoriteit 2%

U kunt dit doen:

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

5

U kunt Google GSON zoals deze gebruiken

UserEntity user = new UserEntity();
user.setUserName("UserName");
user.setUserAge(18);
Gson gson = new Gson();
String jsonStr = gson.toJson(user);

6

Nou, zelfs het geaccepteerde antwoord geeft exact output waarvoor op heeft gevraagd. Het voert de JSON-string uit, maar met "Personages ontsnapt. Dus, hoewel misschien een beetje laat is, ik beantwoord ik dat het mensen zal helpen! Hier is hoe ik het doe:

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

7

OPMERKING: Om het meest gestemd oplossingswerk te maken, moeten attributen in de POJO publiczijn of een openbare getter/ setter:

Standaard werkt Jackson 2 alleen met velden die ook zijn
openbaar, of een openbare getter-methode hebben – serialisatie van een entiteit die:
heeft alle velden privé of pakket privé zal mislukken.

Nog niet getest, maar ik geloof dat deze regel ook geldt voor andere JSON-bibliotheken zoals google Gson.


Antwoord 8

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

Other episodes