【问题标题】:How construct list of objects from json string coming from api response?如何从来自api响应的json字符串构造对象列表?
【发布时间】:2018-04-25 07:14:59
【问题描述】:

之前可能会在这里问过类似的问题,但我没有运气,我想知道如何从下面的 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 来做到这一点吗?

【问题讨论】:

标签: java json spring-boot jackson gson


【解决方案1】:

jolttransformer 是你的朋友。使用 shift 和通配符 * 来捕获任意节点值,然后是标准映射器 (Jackson /gson) 。

【讨论】:

    【解决方案2】:

    由于用户键是随机的,您显然不能将它们映射到命名的 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()
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多