java - 如何从来自 api 响应的 json 字符串构造对象列表?

标签 java json spring-boot jackson gson

以前可能会在这里问类似的问题,但我没有运气,我想知道如何从下面的 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 响应中的其余字段 user:{ } 对象。

理想情况下,我希望最终得到这样的列表:

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

知道我该如何做到这一点吗?最好使用 Jackson JSON Parser/或者 GSON?

最佳答案

由于用户 key 是随机的,因此您显然无法将它们映射到命名的 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()

希望有帮助!

关于java - 如何从来自 api 响应的 json 字符串构造对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250214/

相关文章:

java - spring security 在重定向到 logout.jsp 时给出错误

java vector 作用域

java - 如何使用 Stream 将 Map of Map 转换为 Map of Object

ios - SWIFT 2.1 - 获取 JSON

jquery - 发送 JSON 内容类型 + JavaScript 对象(jQuery ajax)

json - jq 根据另一个属性的值有条件地添加一个新属性

java - 如何在 Thymeleaf 中使用 Dates.Format 和区域设置

java - 最后使用的最佳实践? (不用于释放资源)

java - 无法使用 SAXFilter 删除 SOAP 响应的命名空间

java - 为什么我的 @Scheduled Spring Boot 任务在 Azure 中运行不一致?