2013-05-10 5 views
1

API에서 나는 정상적인 키 => 값 쌍 대신 일반 JSON 배열로 특정 부분을받습니다. 그 어리 석다. 그러나 그것은 내가 처리해야하는 것이다.JSONArray를 위치별로 객체로 매핑하십시오.

예 :

{"build":29625,"list": [ 
    [312218505,1000,624437010,21997878697,35228,0,0,0], 
    [186873474,0,0,0,0,-1,0,0] 
    ... 
]} 

문제는 일반 객체의 필드에 각 배열의 위치를지도 구글 GSON을 받고있다. 당연히 거기에 고유 한 솔루션을 롤백했다 네이티브 지원이 없기 때문에 : 변환이 필요한 각 "요청"convertToObjects()convertToJson() 메서드를 가진 CustomConvert 인터페이스를 구현합니다. 각 '항목'에는 @ArrayPosition(number) 특수 효과가있는 일련의 입력란이 있습니다. convert 메서드는 두 목록간에 변환합니다.

Google GSON 또는 Java 용 JSON 라이브러리를 사용하면 더 좋은 방법이 있습니까?

+1

님, gson serializer/deserializer를 작성 하시겠습니까? 수신중인 JSON의 예를 들려 줄 수 있습니까? –

+0

@Brian 편집을 참조하십시오. 그리고 serializer/deserializer가있는 TMK는 JSONArray를 반환하는 다른 것을 엉망으로 만들 것입니다. – TheLQ

+0

List/array 용으로 작성하지 마십시오. build 필드와 List 필드를 포함하는 객체에 대해 하나를 작성합니다 . 'MyObject'의 생성자에 매개 변수 목록을 전달하여 각각을 인스턴스화하고'List'에 추가하십시오. (JSON 배열의 각 내부 배열이 같은 유형의 객체를 나타낼 것이라고 가정합니다) –

답변

2

위의 설명에서 예를 들어 보겠습니다. 그러나 이것은 제가 생각하고있는 생각입니다. 참고이 경로는 테스트를 거치지 않았지만 적어도이 경로를 사용하려면 경로에 추가해야합니다.

class OuterObject { 
    String build; 
    List<InnerObject> objectList = new ArrayList<InnerObject>(); 
} 

class InnerObject { 
    int field1, field2, field3, field4, field5, field6, field7, field8; 

    public InnerObject(int[] params) { 
     // assign params accordingly 
    } 
} 

class MyDeserializer implements JsonDeserializer<OuterObject> { 
    @Override 
    public OuterObject deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException 
    { 
     OuterObject oo = new OuterObject(); 
     JsonObject jo = je.getAsJsonObject(); 

     oo.build = jo.get("build").getAsString(); 
     JsonArray innerObjArrays = jo.getAsJsonArray("list"); 
     for (JsonElement e : innerObjArrays) 
     { 
      JsonArray innerArray = e.getAsJsonArray(); 
      // This is ugly but should give you the gist 
      InnerClass ic = new InnerClass((int[])jdc.deserialize(innerArray, int[].class)); 
      oo.objectList.add(ic); 
     } 

     return oo; 
    } 

} 
+0

고마워요! (빌드는'jo.get ("build"). getAsString()')이되어야합니다. 그러나 여러분은 훌륭한 출발점을 제공했습니다. – TheLQ

관련 문제