如何从来自api响应的json字符串构造对象列表?
Posted
技术标签:
【中文标题】如何从来自api响应的json字符串构造对象列表?【英文标题】:How construct list of objects from json string coming from api response? 【发布时间】: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 来做到这一点吗?
【问题讨论】:
Ignoring new fields on JSON objects using Jackson的可能重复 不是真的因为我有一个随机的对象名称,可以是任何东西! 这个答案也没有显示如何构造List<User>
列表!
【参考方案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()
希望有帮助!
【讨论】:
以上是关于如何从来自api响应的json字符串构造对象列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 json 响应中连接来自不同对象数组的值? Node.js、Discord.js
如何通过匹配来自两个 API 的 id 来查看来自两个 JSON API 的响应到单个回收器视图适配器中?