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

时间:2017-11-12 14:56:30

标签: 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 response user:{}对象中的其余字段

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

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

任何想法我怎么能这样做,理想情况下杰克逊JSON Parser /或GSON?

2 个答案:

答案 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)。