从json字符串中提取对象数组并将它们放在ArrayList中?

时间:2017-11-12 22:40:59

标签: java json jackson gson resttemplate

我有一个简单的问题,并且想知道这里是否有人可以帮我解析如何解析Json字符串并提取所有用户并将其放入List中?

注意直接在“用户”下的对象键是一个随机数,可随每个响应而变化!

{
    "_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": {}
}

理想情况下,利用Jackson Json或Gson会很好。

此外,我只想构建具有两个字段(id& name)的User对象,并忽略其余字段!

2 个答案:

答案 0 :(得分:3)

杰克逊的态度可能如下:

ObjectMapper om = new ObjectMapper();
JsonNode node = om.readTree(input);

List<JsonNode> users = node.findValues("user");

从这里,您可以直接从JsonNode实例中检索值,例如:

for (JsonNode jsonNode : users) {
    System.out.println(jsonNode.get("name"));
    System.out.println(jsonNode.get("id"));
}

或转换为POJO:

for (JsonNode user : users) {
    User pojo = om.treeToValue(user, User.class);
    System.out.println(pojo.id);
    System.out.println(pojo.name);
}

假设存在类似于以下内容的POJO:

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    public String name, id;
}

答案 1 :(得分:2)

你必须解析json ......这可以像 -

那样完成
JSONObject json=new JSONObject(response);
JSONObject json2=json.getJSONObject("users");
Iterator keys = json2.keys();

while(keys.hasNext()) {
    String key = (String)keys.next();
    JSONObject json3=json2.getJSONObject(key);
    ArrayList<User> list=new ArrayList<>();

    JSONObject userjson=json3.getJSONObject("user");    
    User user = new User();
    String id=userjson.getString("id");
    String name=userjson.getString("name");
    user.setId(id);
    user.setName(name);
    list.add(user);      
}

希望它有所帮助.. :)