2017-11-12 4 views
0

비슷한 질문을하기 전에 여기에서 질문 할 수 있습니다. 그러나 나는 행운이 없었으며 user과 같은 특정 객체를 추출하여 json 문자열 아래에서 어떻게 추출하는지 궁금해서 ArrayList을 생성했습니다. 그러나 하나의 트위스트가 있는데, 하나의 속성 바로 아래 Users은 임의의 숫자 일 수 있습니다 !!! 내 JSON 문자열처럼 보이는 방법은 다음과API 응답에서 json 문자열의 객체 목록을 구성하는 방법은 무엇입니까?

은 다음과 같습니다

<code>{ 
    "_links": { 
    }, 
    "count": { 
    }, 
    "users": { 
     "123321": { //*Is a random number which can be any number 
      "_links": { 
      }, 
      "user": { 
       "id": "123321", 
       "name": "...", 
       "age": "...", 
       "address": "" 
       .. 
      } 
     }, 
     "456654": { 
      "_links": { 
      }, 
      "user": { 
       "id": "456654", 
       "name": "...", 
       "age": "...", 
       "address": "" 
       ... 
      } 
     } 
     ... 
    }, 
    "page": { 
    } 
} 
</code> 

자바 객체 나는 그것이 변환을하고 싶습니다 :

@JsonIgnoreProperties(ignoreUnknown = true) // Ignore any properties not bound here 
public class User { 
    private String id; 
    private String name; 
    //setter:getter 
} 

: 변환은 만 두를 고려해야한다 필드 (id, 이름은)이며, json 응답 user:{} 개체의 나머지 필드는 무시합니다.

이상적으로,이 같은 목록을 끝내고 싶습니다

List<User> users = resulted json transformation should return a list of users!! 

나는 어쩌면 잭슨 JSON 파서/또는 GSON와 함께하시기 바랍니다 이상적으로이 작업을 수행 할 수있는 방법 어떤 생각을?

+0

[Jackson을 사용하여 JSON 객체의 새로운 필드를 무시함] (https://stackoverflow.com/questions/5455014/ignoring-new-fields-on-json-objects-using-jackson) –

+0

글쎄요. 나는 무언가 일 수있는 무작위 객체 이름이있다! –

+0

그 대답은'List '목록을 만드는 방법을 보여주지 않습니다! –

답변

1

사용자 키가 임의적이므로 사용자는 분명히 명명 된 Java 필드에 맵핑 할 수 없습니다. 대신,지도로 최상위 개체를 구문 분석하고 수동으로 사용자 개체를 끌어낼 수 있습니다.

public class UserWrapper { 
    private User user; 
    public User getUser() { return user; } 
} 

public class Root { 
    private Map<String, UserWrapper> users; 

    public List<User> getUsers() { 
     List<User> usersList = new ArrayList(); 
     for (String key : map.keySet()) { 
      UserWrapper wrapper = map.get(key); 
      usersList.add(wrapper.getUser()); 
     } 

     return userList; 
    } 
} 

Root root = parseJson(); 
List<User> users = root.getUsers() 

희망 하시겠습니까?

0

jolt 변압기는 친구입니다. 와일드 카드 *과 함께 shift을 사용하여 임의의 노드 값을 캡처 한 다음 표준 맵퍼 (Jackson/gson)를 캡처하십시오.