之前可能会问类似的问题,但我没有运气,我想知道如何从json字符串下面提取user
等特定对象,然后构造一个ArrayList
。但是,有一个扭曲,直接在Users
下的一个属性是一个随机数,可以是任何东西!!!
以下是我的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>
我想将它转换为的java对象是:
@JsonIgnoreProperties(ignoreUnknown = true) // Ignore any properties not bound here
public class User {
private String id;
private String name;
//setter:getter
}
注意:转换应该只考虑这两个字段( id,name ),并忽略json response user:{}
对象中的其余字段
理想情况下,我希望得到一个这样的列表:
List<User> users = resulted json transformation should return a list of users!!
任何想法我怎么能这样做,理想情况下杰克逊JSON Parser /或GSON?
答案 0 :(得分: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()
希望有所帮助!
答案 1 :(得分:0)
jolt变形金刚是你的朋友。使用带有通配符shift
的{{1}}来捕获任意节点值,然后使用标准映射器(Jackson / gson)。