Mengkonversi objek Java ke JSON dengan Jackson

166

Saya ingin JSON saya terlihat seperti ini:

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

Kode sejauh ini:

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

}

dan

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

Saya baru saja melewatkan bagian bagaimana saya dapat mengkonversi objek Java ke JSON dengan Jackson:

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

Pertanyaan saya adalah: Apakah kelas saya benar? Contoh mana yang harus saya panggil dan bagaimana saya bisa mencapai hasil JSON ini?

JustTheAverageGirl
sumber
4
Tutorial berikut mungkin membantu: mkyong.com/java/how-to-convert-java-object-to-from-json-jackson
maple_shaft
Terima kasih telah membantu saya :)
JustTheAverageGirl
jika entitas bergabung dengan tabel lain maka ikuti cara ini .. /programming/19928151/convert-entity-object-to-json/45695714#45695714
Sedat Y

Jawaban:

417

Untuk mengonversi objectJSON Anda dengan Jackson:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);
Jean Logeart
sumber
9
Satu-satunya hal adalah String keluar dari ObjectWriter. Gunakan: JSONObject baru (ow.writeValueAsString (msg)) jika sedang dikirim melalui Layanan Web seperti RESTful.
jmarcosSF
Tidak tertarik mengapa bukan os.writeValueAsJSONString (objek)?
DevilCode
3
Saya menghadapi kesalahan ini, bagaimana menyelesaikannya dengan kode Anda Tidak ditemukan serializer untuk kelas com.liveprocessor.LPClient.LPTransaksi dan tidak ada properti yang ditemukan untuk membuat BeanSerializer (untuk menghindari pengecualian, nonaktifkan SerializationFeature.FAIL_ON_EMPTY_BEANS))
11
perpustakaan dengan cara: import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter;
diego matos - keke
objectHARUS memiliki getter untuk semua bidang, yang Anda inginkan termasuk JSON Anda.
Drakonoved
25

Saya tahu ini sudah lama (dan saya baru di java), tetapi saya mengalami masalah yang sama. Dan jawabannya tidak sejelas bagi saya sebagai seorang pemula ... jadi saya pikir saya akan menambahkan apa yang saya pelajari.

Saya menggunakan perpustakaan pihak ketiga untuk membantu dalam upaya ini: org.codehaus.jackson Semua unduhan untuk ini dapat ditemukan di sini .

Untuk fungsionalitas JSON dasar, Anda perlu menambahkan toples berikut ke perpustakaan proyek Anda: jackson-mapper-asl dan jackson-core-asl

Pilih versi yang dibutuhkan proyek Anda. (Biasanya Anda bisa menggunakan build stable terbaru).

Setelah mereka diimpor ke perpustakaan proyek Anda, tambahkan importbaris berikut ke kode Anda:

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

Dengan objek java yang ditentukan dan nilai yang ditetapkan yang ingin Anda konversi ke JSON dan kembali sebagai bagian dari layanan web RESTful

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

Hasilnya akan terlihat seperti ini: {"firstName":"Sample","lastName":"User","email":"[email protected]"}

f10orf12
sumber
Saya percaya baris 'import' telah berubah menjadi "import com.fasterxml.jackson.databind.ObjectMapper;"
barrypicker
16

Ini mungkin berguna:

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));
Vicky
sumber
10

lakukan saja ini

 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();
Shell Scott
sumber
Apa itu Response.ok?
Codeversed
Saya punya masalah dengan ukuran JSON dimasukkan ke dalam mongoDB berada di atas batas yang diizinkan, ketika saya menghidupkan objek Gson saya memiliki ukuran lebih besar daripada dengan Jackson. Hanya sebuah tip.
Daniela Morais
14
Pertanyaannya adalah tentang jackson, bukanGson
Ean V
2
@Codeversed Response adalah kelas di perpustakaan Jersey. Response.ok akan mengembalikan respons JSON dengan kode status 200.
Pranav
2

Yah, bahkan jawaban yang diterima tidak persis menampilkan apa yang diminta op. Ini menghasilkan string JSON tetapi dengan "karakter lolos. Jadi, walaupun mungkin sedikit terlambat, saya menjawab berharap itu akan membantu orang! Inilah cara saya melakukannya:

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

Anda bisa melakukan ini:

String json = new ObjectMapper().writeValueAsString(yourObjectHere);
Clayton KN Passos
sumber
Saya selalu suka satu jawaban.
Kishan Solanki
2

Catatan: Agar solusi yang paling dipilih berfungsi, atribut dalam POJO harus publicatau memiliki publik getter/ setter:

Secara default, Jackson 2 hanya akan bekerja dengan bidang yang bersifat publik, atau memiliki metode pengambil publik - membuat serialisasi entitas yang memiliki semua bidang pribadi atau paket pribadi akan gagal.

Belum diuji, tapi saya percaya bahwa aturan ini juga berlaku untuk lib JSON lain seperti google Gson.

ZhaoGang
sumber
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();
    }
}
Artavazd Manukyan
sumber
Terlalu banyak pekerjaan, terlalu banyak refleksi! Pemetaan seharusnya membebaskan Anda dari melakukan hal-hal boilerplate ini!
Ean V
3
Saya suka Konvektor!
Christos
0

Anda dapat menggunakan Google Gson seperti ini

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

Gson gson = new Gson();
String jsonStr = gson.toJson(user);
Yang Mulia
sumber