2014-03-25 3 views
2

다음 잭슨은 Jackson Mapper를 사용하여 POJO에 매핑됩니다. deserialization 중에 json의 배열 열 순서는 어떻게 유지합니까? 어떤 특수 효과를 사용해야합니까?리스트에 json 배열을 비 직렬화하고 목록 내의 json으로부터 배열 순서를 유지

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() : { "FIRSTNAME", "성", "사용자 이름 "}
  • 실제 getColumnNames() : { "UserName", "FirstName", "LastName"}

나는 어떤 도움을 주신 잭슨지도를 처음 사용합니다.

+1

디시리얼라이저는 어떤 모습입니까? 단순히 잘못된 순서로 비 직렬화 할 수있는 것처럼 보입니다. JSON이 예상 한 순서대로되지 않았을 수도 있습니다. – Aarowaim

+1

Hmmm, JSON 중 하나가 잘못되었거나'readValue' 구현에 항상 부작용이있는 것은 아닙니다. 분명히 주문을 유지할 필요가 있지만 맞춤형 디시리얼라이저 작성 이외에도이 문제를 극복 할 방법이 없다고 생각합니다. deserialization을 위해 GSON 라이브러리를 사용 했으므로 디시리얼라이저를 작성하는 것은 꽤 쉬웠습니다. 당신이 다른 라이브러리를 시험해 볼 수있는 옵션이 있는지는 확실하지 않다. (코드가 얼마나 많은지에 달려있다.) – Aarowaim

+0

나는 그것을 또한 검사했고,'Jackson'은 예상대로 그것을 deserialize했다. 사용자 지정 디시리얼라이저 또는 이와 비슷한 것을 사용하고 있습니까? 직설화 한 후에 실수로이 목록에서 주문을 변경하고 계신지 모르십니까? –

답변