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?



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

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

Hasilnya akan terlihat seperti ini: {"firstName":"Sample","lastName":"User","email":"sampleU@example.com"}


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

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

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


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.


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

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.