当前位置: 首页 > 面试题库 >

杰克逊如何将JsonNode转换为ArrayNode而不进行转换?

艾奕
2023-03-14
问题内容

我将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吗?有没有一种等效于的方法getJSONArrayorg.json以便在不是数组的情况下进行适当的错误处理?


问题答案:

是的,Jackson手动解析器的设计与其他库完全不同。特别是,您会注意到它JsonNode具有通常与其他API的数组节点关联的大多数功能。因此,您无需强制转换为ArrayNode即可使用。这是一个例子:

JSON:

{
    "objects" : ["One", "Two", "Three"]
}

码:

final String json = "{\"objects\" : [\"One\", \"Two\", \"Three\"]}";

final JsonNode arrNode = new ObjectMapper().readTree(json).get("objects");
if (arrNode.isArray()) {
    for (final JsonNode objNode : arrNode) {
        System.out.println(objNode);
    }
}

输出:

“一个”
“两个”
“三个”



请注意,isArray在迭代之前使用来验证该节点实际上是一个数组。如果您对数据结构绝对有信心,则不必进行检查,但是如果您需要它,可以进行检查(这与大多数其他JSON库没有什么不同)。



 类似资料:
  • 问题内容: 使用以下代码,我已将列表转换为json,但格式如下: 但我想将其转换为: 以下是我的弹簧控制器: 问题答案: 更改从返回结果给放: 如此; 更新 您可以将结果作为字符串返回,您将获得所需的内容: 返回的字符串是json格式。

  • 问题内容: 我想使用杰克逊将下面的json数组转换为java hashmap并迭代如下值: 需要这样的输出: JSON示例:在此处输入代码 如果有人可以共享代码以实现此目标,将不胜感激。 谢谢你的帮助! 问题答案: 这是一个揭示想法的解决方案:

  • 问题内容: 正在具有json数组的String如下 我想将此jsonarray转换为。为此,我添加了maven依赖项“ ”,还为员工编写了pojo类。但是当我尝试运行下面的代码时 正在收到以下异常。 有人可以告诉我丢失了什么或做错了什么吗 问题答案: 问题不在您的代码中,而在您的json中: 这表示一个包含属性Compemployes的对象,该属性是Employee的列表。在这种情况下,您应该创建

  • 问题内容: 我正在使用Jackson 将Java Bean转换为。 但是,它不是保留对象,而是将其转换为。 这是失败的测试用例, 有一个简单的解决方案吗? 问题答案: 默认情况下,Jackson将实例序列化为数字时间戳。您可以将Jackson配置为使用带有 或提供您自己的。 但是,当您进行转换时,中间JSON和目标类型中绝对没有任何内容可向Jackson表示应将其反序列化为对象。如果没有额外的类型

  • 问题内容: 我需要反序列化JSON对象并以不区分大小写的方式访问字段。例: 这需要高效,因此调用和简化结果并不是一个好的解决方案。 问题答案: 没有自动的方法,但是您可以通过创建自定义的JsonNodeFactory来创建自定义的ObjectNodes,然后可以覆盖用于添加和访问条目的方法。