我正在将我的JSON库从org.json改为Jackson,并且我想迁移以下代码:
JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray = datasets.getJSONArray("datasets");
现在,在杰克逊身上,我有以下几点:
ObjectMapper m = new ObjectMapper();
JsonNode datasets = m.readTree(new URL(DATASETS));
ArrayNode datasetArray = (ArrayNode)datasets.get("datasets");
但是我不喜欢那里的演员阵容,有没有ClassCastException
的可能性?在org.json
中有没有等同于getJSONArray
的方法,以便在它不是数组的情况下有适当的错误处理?
发布于 2020-05-07 13:15:35
在Java 8中,你可以这样做:
import java.util.*;
import java.util.stream.*;
List<JsonNode> datasets = StreamSupport
.stream(obj.get("datasets").spliterator(), false)
.collect(Collectors.toList())
发布于 2018-11-30 14:15:31
我假设在一天结束时,您希望通过迭代来使用ArrayNode中的数据。要做到这一点:
Iterator<JsonNode> iterator = datasets.withArray("datasets").elements();
while (iterator.hasNext())
System.out.print(iterator.next().toString() + " ");
或者,如果您对streams和lambda函数感兴趣:
import com.google.common.collect.Streams;
Streams.stream(datasets.withArray("datasets").elements())
.forEach( item -> System.out.print(item.toString()) )
发布于 2022-03-03 04:19:27
通过调用JsonNode的iterator()
方法获得迭代器,然后继续...
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
}
}
https://stackoverflow.com/questions/16788213
复制相似问题