【发布时间】:2020-04-07 11:12:20
【问题描述】:
在我们的旧代码中,我们以HashMap 的形式发送请求正文,我无法更改,因为其他应用程序可能会受到影响。
示例 Hashmap 值 = {name=name1, age=age1}
但是,如果我的请求中有多个 JSON 对象,我在使用 HashMap 时会遇到问题,例如
HashMap<String, Object> map = new HashMap<String, Object>();
for (Person person: Persons) {
map.put("name", "name1");
map.put("age", "age1");
}
如果有 2 个人或更多人,则只有最后一个人的姓名和年龄将放在 Map 中,因为第一个人的姓名和年龄会被覆盖,因为它们具有相同的键(“姓名”和“年龄” )。
我想要的地图值是[{name=name1, age=age1}, {name=name2, age=age2}],但我只得到了{name=name2, age=age2}
我所做的是,在每个循环中,我把它放在JSONArray:
JSONArray jsonArray = new jsonArray();
for (Person person: Persons) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("name", "name1");
map.put("age", "age1");
jsonArray.put(map);
}
所以当我打印JSONArray 时,它是:
[{"name":"name1", "age":"age1"}, {"name":"name2", "age":"age2"}]
但同样,我需要将其转换为 HashMap,以便将其作为参数传递给 oursendRequest() 方法。
我尝试在 Jackson 中使用 ObjectMapper,但没有成功。
这可能吗,怎么做?
【问题讨论】:
-
您的示例不完整,请遵守 Java 的正确命名约定。
-
我可以知道我的例子中什么不完整吗?谢谢
-
什么是 JSON 输入的实际示例?比如,哪里有倍数?此外,如果您使用标准集合,请使用
Map作为HashMap的类型,因为这是更标准的做法。它只是众多实现中的一种,因此在这种情况下实现无关紧要。最后,如果两个人确实有相同的名字,那么当然会覆盖其中一个。这就是地图的工作原理。 -
示例 json 输入是我上面提到的 jsonArray 对象的值。我希望将 jsonArray 的值转换为 Map
映射,因为我将在我的请求方法中传递映射。我的最终目标是想出与 jsonArray 值相似的地图对象。 -
List<Person>的示例是什么样的?这是你开始的吗?你把它作为 JSON 拿回来了吗?为什么要将它映射到JSONArray而不是List<Person>?如果您已经有 POJO,为什么还需要 JSON 库?