首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >杰克逊如何在不进行造型的情况下将JsonNode转换为ArrayNode?

杰克逊如何在不进行造型的情况下将JsonNode转换为ArrayNode?
EN

Stack Overflow用户
提问于 2013-05-28 17:14:36
回答 3查看 240.9K关注 0票数 139

我正在将我的JSON库从org.json改为Jackson,并且我想迁移以下代码:

代码语言:javascript
复制
JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray =  datasets.getJSONArray("datasets");

现在,在杰克逊身上,我有以下几点:

代码语言:javascript
复制
ObjectMapper m = new ObjectMapper();
JsonNode datasets = m.readTree(new URL(DATASETS));      
ArrayNode datasetArray = (ArrayNode)datasets.get("datasets");

但是我不喜欢那里的演员阵容,有没有ClassCastException的可能性?在org.json中有没有等同于getJSONArray的方法,以便在它不是数组的情况下有适当的错误处理?

EN

回答 3

Stack Overflow用户

发布于 2020-05-07 21:15:35

在Java 8中,你可以这样做:

代码语言:javascript
复制
import java.util.*;
import java.util.stream.*;

List<JsonNode> datasets = StreamSupport
    .stream(obj.get("datasets").spliterator(), false)
    .collect(Collectors.toList())
票数 15
EN

Stack Overflow用户

发布于 2018-11-30 22:15:31

我假设在一天结束时,您希望通过迭代来使用ArrayNode中的数据。要做到这一点:

代码语言:javascript
复制
Iterator<JsonNode> iterator = datasets.withArray("datasets").elements();
while (iterator.hasNext()) 
        System.out.print(iterator.next().toString() + " "); 

或者,如果您对streams和lambda函数感兴趣:

代码语言:javascript
复制
import com.google.common.collect.Streams;
Streams.stream(datasets.withArray("datasets").elements())
    .forEach( item -> System.out.print(item.toString()) )
票数 3
EN

Stack Overflow用户

发布于 2022-03-03 12:19:27

通过调用JsonNode的iterator()方法获得迭代器,然后继续...

代码语言:javascript
复制
  JsonNode array = datasets.get("datasets");

  if (array.isArray()) {
      Iterator<JsonNode> itr = array.iterator();
      /* Set up a loop that makes a call to hasNext().
      Have the loop iterate as long as hasNext() returns true.*/
      while (itr.hasNext()) {
          JsonNode item=itr.next();
          // do something with array elements
      }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16788213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档