【问题标题】:Jackson Json: How to get multiple values with same name from json node javaJackson Json:如何从json节点java中获取多个具有相同名称的值
【发布时间】:2018-10-07 09:00:03
【问题描述】:

我有一个如下所示的 Json 字符串:

{
 "generatedList1":{"myList":["1","2","3","4"]},
 "generatedList2":{"myList":["1","6","8","2"]},
 "generatedList3":{"myList":["1","12","3","11"]}
}

我想收集所有 myList 中的所有值 即[1,2,3,4,6,8,11,12]

我将字符串转换为JsonNode,然后执行JsonNode.findValues("myList"),它返回List<JsonNode>。 但是当我尝试将每个JsonNode 转换为String 时,我得到双引号和方括号作为String 的一部分,而不仅仅是数字。 我可以从String 中删除它,但它看起来很老套。 我确信必须有一种直接的方法来做到这一点。 任何帮助将不胜感激。

【问题讨论】:

  • 请将您的实际代码添加到问题中(使用{} 按钮正确格式化)。听起来您直接使用JsonNode 而不是您得到的List。为什么?
  • 我正在遍历每个节点,并且对于每个节点我都在做 mapper.writeValueAsString(node);这个字符串有双引号和方括号。 Apoorv 的解决方案对我有用。

标签: java json jackson jsonnode


【解决方案1】:

这里,JsonNode.findValues("myList") 返回一个 JsonNode 列表。

您可以通过以下方式对每个 JsonNode 对象进行迭代并将它们轻松转换为 List<Integer>

ObjectMapper mapper = new ObjectMapper();
List<Integer> list = mapper.readerFor(new TypeReference<List<Integer>>(){}).readValue(jsonNode);

然后您可以组合Integers 的这些列表来查找存在的唯一整数。

【讨论】:

  • 你试过了吗?因为列表包含String 值,我怀疑杰克逊是否聪明地将它们解析为整数
  • 是的,我使用 Json 字符串 "[\"1\",\"2\",\"3\",\"4\"]" 进行了尝试,它按预期工作,返回一个整数列表。
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多