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

Extract an array of objects from json string and put them in ArrayList?

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

注意Users正下方的对象键是一个随机数,可以随每次响应而变化!

{
    "_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 和名称)的用户对象,而忽略其余字段!

您必须解析 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);      
}

希望对您有所帮助..:)

Jackson 方法可能如下所示:

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;
}