การดีซีเรียลไลซ์ของอาร์เรย์ json ไปยังรายการและรักษาลำดับอาร์เรย์จาก json ภายในรายการ

ฉันมี json ต่อไปนี้ที่แมปกับ POJO โดยใช้ Jackson mapper ฉันจะรักษาลำดับของคอลัมน์อาร์เรย์จาก json ในระหว่างการดีซีเรียลไลซ์ได้อย่างไร ฉันควรใช้คำอธิบายประกอบแบบใด

เจสัน:

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

}

โปโจ:

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(): {"FirstName","LastName","UserName"}
  • getColumnNames(): {"ชื่อผู้ใช้", "FirstName", "นามสกุล"}

ฉันยังใหม่กับการทำแผนที่ Jackson ดังนั้นจึงยินดีเป็นอย่างยิ่งสำหรับความช่วยเหลือ


person Sensei    schedule 25.03.2014    source แหล่งที่มา
comment
ดีซีเรียลไลเซอร์ของคุณมีหน้าตาเป็นอย่างไร? ดูเหมือนว่าคุณอาจได้รับการดีซีเรียลไลซ์ในลำดับที่ไม่ถูกต้อง อาจเป็นไปได้ว่า JSON ไม่อยู่ในลำดับที่คุณคาดหวัง   -  person Aarowaim    schedule 25.03.2014
comment
อืม ถ้าอย่างนั้น JSON ก็ไม่เป็นระเบียบ หรือการใช้งาน readValue ก็มีผลข้างเคียงที่ไม่อยู่ในลำดับเสมอไป เห็นได้ชัดว่าคุณต้องการให้มันคงอยู่ตามลำดับ แต่นอกเหนือจากการเขียนดีซีเรียลไลเซอร์แบบกำหนดเองแล้ว ฉันไม่คิดว่าจะมีวิธีเอาชนะสิ่งนี้ได้ ฉันใช้ไลบรารี GSON สำหรับการดีซีเรียลไลเซอร์ และการเขียนดีซีเรียลไลเซอร์ก็ค่อนข้างง่าย ไม่แน่ใจจริงๆว่าคุณมีตัวเลือกในการลองใช้ไลบรารี่อื่นหรือไม่ (ขึ้นอยู่กับจำนวนโค้ดที่คุณเขียน)   -  person Aarowaim    schedule 25.03.2014
comment
ฉันตรวจสอบมันแล้วและสำหรับฉัน Jackson ทำการดีซีเรียลไลซ์มันตามที่คุณคาดหวัง คุณใช้ดีซีเรียลไลเซอร์แบบกำหนดเองหรืออะไรทำนองนั้นหรือไม่? บางทีคุณอาจบังเอิญเปลี่ยนลำดับในรายการนี้หลังจากการดีซีเรียลไลซ์ใช่ไหม   -  person Michał Ziober    schedule 25.03.2014
comment
นี่เป็นความเข้าใจผิดในตอนท้ายของฉัน ลำดับจะถูกเก็บไว้เสมอในระหว่างการดีซีเรียลไลซ์อาเรย์ซึ่งเป็นแนวคิดที่ขับเคลื่อน ObjectMapper ตาม บล็อก นี้ ObjectMapper ใช้ Tree Model เพื่อเป็นตัวแทน Json ที่เข้ามา โมเดลต้นไม้ เช่นเดียวกับ DOM นำเสนอการแมประหว่างคอลัมน์และค่าที่เชื่อถือได้แบบหนึ่งต่อหนึ่ง   -  person Sensei    schedule 26.03.2014


คำตอบ (1)


ผู้ทำแผนที่ Jackson เติม ArrayList โดยรักษาลำดับของ JSON หากคุณต้องการคำสั่งซื้ออื่น คุณสามารถใช้คำอธิบายประกอบ @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