마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Volleyer.withTargetClass와 Jackson을 이용한 json 파싱 질문입니다

0 추천
volleyer().get(url).withTargetClass(Item[].class).withListener(listener).excute();
// Item
@JsonIgnoreProperties(ignoreUnknown = true)
public class Item
{
  @JsonProperty("name")
  public String name;
  @JsonProperty("url")
  public String url;
}

이런 식으로 쓰고 싶은데, 넘어오는 json이 요상한 형태라 어떻게 해야하는지 모르겠어요.

 

{
  "my_result":[
  {
    "name":"a",
    "url":"http:///aaaa.com"
  },
  {
    "name":"b",
    "url":"http:///bbbb.com"
  }]
}

json 형태는 제가 바꿀 수 없어서 그대로 써야해요...

 

my_result 만 없으면 저렇게 쓰면 되는데, 저게 달려있으니까 오류가 나더라고요.

Item 클래스 위에 @JsonRootName(value="my_result") 를 넣어도 안되는건 마찬가지고요.

 

volleyer가 쓰기 편하게 나온 것 같고, 하는 김에 jackson까지 같이 적용해보려하는건데, 시작부터 막히네요 ㅋㅋ 

쎄미 (162,410 포인트) 님이 2015년 7월 21일 질문

2개의 답변

+1 추천
 
채택된 답변

volleyer를 써보지 않아서 잘 모르겠습니다만,  volleyer보단 jackson에서 변환할 때 문제가 있지 않았나 싶네요

아래처럼 클래스를 하나 더 추가하고, withTargetClass에서 Response.class를 파라미터로 넣으면 되지 않을까 싶습니다.

public class Response {
    @JsonProperty("my_result")
    public List<Item> items;

    public void setItems(List<Item> items) {
        this.items = items;
    }

    public List<Item> getItems() {
        return items;
    }
}
cc1232 (35,280 포인트) 님이 2015년 7월 22일 답변
쎄미님이 2015년 7월 22일 채택됨
ㅋ 질문에 직접 답하기 애매해서 테스트 해보고 달았더니 그 사이에 질문자 분께서 답을 찾으셨네요
클래스 만들 생각은 안하고 @JsonProperty 같은 걸 사용하면 바로 되는게 있을 것 같아서 그것만 찾았는데 못 찾겠더라고요 ㅎㅎ
퇴근하다보니 문득 그 생각이 났는데, 출근해서 해보니 잘 되네요 ㅋㅋ
0 추천

막힐 땐 퇴근하면 되는군요 ㅋㅋ 

Item 들을 가지고 있을 클래스를 만들고, 거기에 넣으면 되네요. 

volleyer().get(url).withTargetClass(Items.class).withListener(listener).excute();

 

// Items
@JsonIgnoreProperties(ignoreUnknown = true)
public class Items
{
  @JsonProperty("my_result")
  public ArrayList<Item> items;
}

 

http://susemi99.kr/3201 에 관련글 올렸습니다.

쎄미 (162,410 포인트) 님이 2015년 7월 22일 답변
쎄미님이 2015년 7월 22일 수정
...