deserialisasi array json ke daftar dan mempertahankan urutan array dari json dalam daftar

Saya memiliki json berikut yang dipetakan ke POJO menggunakan Jackson mapper. Bagaimana cara mempertahankan urutan kolom array dari json selama deserialisasi? Anotasi apa yang harus saya gunakan?

JSON:

{
"columnNames": [
   "FirstName",
   "LastName",
   "UserName"
],
"values": [
    [
        "John",
        "Smith",
        "jsmith"
    ],
    [
        "Tim",
        "Cook",
        "tcook"
    ]
]

}

POJO:

public class Data implements Serializable {

private List<String> columnNames = new ArrayList<String>();

private List<ArrayList<String>> values = new ArrayList<ArrayList<String>>();

public List<String> getColumnNames() {
    return columnNames;
}

public void setColumnNames(List<String> columnNames) {
    this.columnNames = columnNames;
}

public List<ArrayList<String>> getValues() {
    return values;
}

public void setValues(List<ArrayList<String>> values) {
    this.values = values;
}

}

  • GetColumnNames() yang diharapkan: {"FirstName","LastName","UserName"}
  • GetColumnNames() yang sebenarnya: {"UserName","FirstName","LastName"}

Saya baru mengenal pemetaan Jackson jadi bantuan apa pun sangat kami hargai.


person Sensei    schedule 25.03.2014    source sumber
comment
Seperti apa tampilan deserializer Anda? Sepertinya Anda mungkin melakukan deserialisasi dalam urutan yang salah. Mungkin juga JSON tidak sesuai urutan yang Anda harapkan.   -  person Aarowaim    schedule 25.03.2014
comment
Hmmm, JSON-nya rusak, atau penerapannya pada readValue memiliki efek samping yaitu tidak selalu teratur. Jelas Anda memang membutuhkannya agar tetap teratur, tetapi selain menulis deserializer khusus, menurut saya tidak ada cara untuk mengatasinya. Saya menggunakan perpustakaan GSON untuk deserialisasi dan cukup mudah untuk menulis deserializer. Tidak begitu yakin apakah Anda memiliki opsi untuk mencoba perpustakaan lain (tergantung berapa banyak kode yang Anda tulis)   -  person Aarowaim    schedule 25.03.2014
comment
Saya juga memeriksanya dan bagi saya Jackson membatalkan serialisasinya seperti yang Anda harapkan. Apakah Anda menggunakan deserializer khusus atau semacamnya? Mungkin Anda secara tidak sengaja mengubah urutan daftar ini setelah melakukan deserialisasi, bukan?   -  person Michał Ziober    schedule 25.03.2014
comment
Ini adalah kesalahpahaman pada akhirnya. Urutan selalu dipertahankan selama deserialisasi array yang merupakan konsep yang menggerakkan ObjectMapper. Menurut blog ini, ObjectMapper mengimplementasikan Model Pohon untuk mewakili Json yang masuk. Model Pohon, seperti DOM, menawarkan pemetaan satu lawan satu yang andal antara kolom dan nilainya.   -  person Sensei    schedule 26.03.2014


Jawaban (1)


Jackson mapper mengisi ArrayList dengan menjaga urutan JSON. Jika ingin pesanan berbeda, Anda dapat menggunakan anotasi @JsonPropertyOrder.

(http://fasterxml.github.io/jackson-annotations/javadoc/2.3.0/com/fasterxml/jackson/annotation/JsonPropertyOrder.html)

person Francesco Lo Cascio    schedule 30.03.2016