【问题标题】:How to convert a JsonNode containing a list of string to a comma separated string in Java如何在Java中将包含字符串列表的JsonNode转换为逗号分隔的字符串
【发布时间】:2019-04-17 12:00:25
【问题描述】:

JsonNode:

{
  name: ["bishal", "jaiswal", "Turtle"],
  title: "jaiswal"
}

我想以一种有效的方式从 jsonNode 中提取name 的列表作为逗号分隔的字符串:

输出:

nameList ="bishal,jaiswal,Turtle"

除了将name数组的jsonNode转换为列表&然后使用join方法制作逗号分隔的字符串。有更好的方法吗?

【问题讨论】:

  • 如果您使用框架将 JSON 读入对象,该框架可能会提供这样做的功能,例如 Swagger 中的 ResponseContainer。如果不使用框架,可以对它使用简单的 String 操作,比如 split。
  • 有什么方法可以在从json访问name键后,直接将jsonNode对象转换为逗号分隔的字符串,而无需应用太多操作,现在我将jsonNode转换为一个List使用ObjectMapper,然后使用list上的join方法生成逗号分隔的字符串,有没有更好的办法呢?
  • 在这种情况下,您可以使用 Jackson JSON。例如JsonNode rootNode = objectMapper.readTree(jsonData); JsonNode title = rootNode.path("title");

标签: java arrays json string


【解决方案1】:

这是破解

    ObjectMapper objectMapper = new ObjectMapper();
    final JsonNode jsonNode = objectMapper.readTree("{\"name\":[\"bishal\",\"jaiswal\",\"Turtle\"],\"title\":\"jaiswal\"}");
    final JsonNode name = jsonNode.get("name");
    final Iterator<JsonNode> iterator = name.iterator();
    StringBuilder s = new StringBuilder();
    while (iterator.hasNext()){
        final JsonNode next = iterator.next();
        if(s.length() > 0){
            s.append(",");
        }
        s.append(next);
    }
    System.out.println(s.toString());

希望对你有所帮助。

【讨论】:

  • 问题中已经提到了,需要这样做,不要将其转换为列表,然后将其更改为逗号分隔的字符串。
  • 使用迭代器是类似的方法,因为我必须遍历整个 jsonNode 数组。这可行,但我正在寻找别的东西。还是谢谢。
  • 不幸的是,Jackson Framework 没有任何实用方法可以在 jsonNode 中加入 sting。这就是我们需要遍历数组的原因,或者我们可以使用 string.join() ,这比遍历数组更可取。让我们希望杰克逊将来会发布对此类要求的支持。
【解决方案2】:

在这种情况下,您可以使用 Jackson JSON...

Jackson 是一个非常流行且高效的基于 Java 的库,用于将 Java 对象序列化或映射到 JSON,反之亦然

例如

ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonData); //jsonData is your json string here...
JsonNode names = rootNode.path("name");

Iterator<JsonNode> elements = names.elements();

while(elements.hasNext()){
    JsonNode name = elements.next();
    System.out.println("Names are = "+name);
}

请告诉我这是否解决了您的问题?谢谢

【讨论】:

    猜你喜欢
    • 2014-03-21
    • 2013-02-04
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多