Jackson 中的 readValue 和 readTree:何时使用哪个?

2023-12-31

我刚刚开始使用 Jackson JSON 库。 Jackson 是一个非常强大的库,但它有非常广泛的 API。很多事情可以通过多种方式完成。这使得你很难在杰克逊找到自己的方式——如何知道什么是正确/最好的做事方式?

为什么我要使用这个解决方案:

String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(json, JsonNode.class);
if (node.isObject()) {
    ObjectNode obj = mapper.convertValue(node, ObjectNode.class);
    if (obj.has("a")) {
        System.out.println("a=" + obj.get("a").asDouble());
    }
}

通过这样的解决方案:

String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
if (node.isObject()) {
    ObjectNode obj = (ObjectNode) node;
    if (obj.has("a")) {
        System.out.println("a=" + obj.get("a").asDouble());
    }
}     

或者通过我使用 JsonFactory 和 JsonParser 遇到的解决方案,甚至可能还有更多选项......

看来mapper.readValue是最通用的,可以在很多情况下使用:读取JsonNode、ObjectNode、ArrayNode、PoJo等。那么为什么我要使用mapper.readTree呢?

将 JsonNode 转换为 ObjectNode 的最佳方法是什么?只是转换到 ObjectNode 吗?或者使用诸如mapper.convertValue之类的东西?


readValue() 可用于任何和所有类型,包括JsonNode。 readTree() 仅适用于JsonNode(树模型);并且是为了方便而添加的。

请注意,您永远不想使用第一个示例:它相当于将节点写为 JSON,然后将其读回——只需转换它即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jackson 中的 readValue 和 readTree:何时使用哪个? 的相关文章

  • Guice:当 FactoryBuilder 中提供合适的构造函数时,“找不到合适的构造函数”

    我使用 Guice 进行依赖注入 但收到此错误 1 Could not find a suitable constructor in java lang Void Classes must have either one and only
  • 克隆 dom.Document 对象

    我的目的是将xml文件读入Dom对象 编辑dom对象 其中涉及删除一些节点 完成此操作后 我希望将 Dom 恢复到其原始状态 而不实际解析 XML 文件 无论如何 我可以克隆第一次解析 xml 文件后获得的 dom 对象吗 这个想法是避免一
  • 打印数组时出错

    我得到这个代码 import java util import java io public class Oblig3A public static void main String args OrdAnalyse O new OrdAna
  • LibGDX 闪烁

    我已经使用 LibGDX UI 设置来启动一个项目 我在实现 ApplicationListener 中唯一拥有的是 public void create setScreen new LoadingScreen this 这应该会触发 Lo
  • docker 中带有参数的 jar 文件

    Helo 我有一个 java jar 文件 当我从终端运行它时 它会接受一堆参数作为输入 我想制作一个 docker 映像并运行它 其中包含 jar 文件 我仍然可以在其中传递 jar 文件的参数 将 jar 文件设置为您的入口点 http
  • Java J文件选择器

    我希望能够控制外观JFileChooser 我特别想保存如何JFileChooser上次显示时显示 我想保存它是否在详细信息 列表视图中使用以及列表被排序的列 例如 大小或修改日期 我知道有很多关于JFileChooser但我一直没能找到我
  • SQLite 64位整数在jooq中被识别为int

    我有一个与 jOOQ 一起使用的 SQLite 数据库 当我使用 jOOQ 的代码生成工具时 它会按预期构建所有表和记录类 然而 所有的 SQLiteINTEGER列变成java lang Integer生成的代码中的字段 问题是 SQLi
  • 如何在 Java 中读取/转换 InputStream 为字符串?

    如果你有一个java io InputStream对象 您应该如何处理该对象并生成一个String 假设我有一个InputStream包含文本数据 我想将其转换为String 例如我可以将其写入日志文件 最简单的方法是什么InputStre
  • oracle.jdbc.driver.OracleDriver ClassNotFoundException

    这是我收到错误的代码 我的classes12 jar已作为外部 jar 导入 import java io IOException import java io PrintWriter import java sql Connection
  • 为什么这段代码可以在 Java 7 中运行,而不能在 Java 8 中运行?

    我目前使用 IDE Eclipse 版本 Neon 2 Release 4 6 2 和版本 java Version 8 Update 131 在此代码中 IDE 给出错误 类型不匹配 无法从字节转换为整数 Integer i byte 1
  • 我有什么理由应该嘲笑?

    我也是 Mockito 和 PowerMockito 的新手 我发现我无法使用纯 Mockito 测试静态方法 因此我需要使用 PowerMockito 对吗 我有一个非常简单的类 名为 Validate 使用这个非常简单的方法 publi
  • 抛出 UnsupportedOperationException

    因此其中一种方法的描述如下 public BasicLinkedList addToFront T data 该操作无效 对于排序列表 将生成 UnsupportedOperationException 使用消息 排序列表的操作无效 我的代
  • 如何在 iText 7 中创建页面大小不等的文档

    如何在 iText 7 中创建页面大小不等的文档 iText7 可以吗 在iText5中 我使用document setPageSize and document newPage 如果您通过高级 API 添加内容 Document add
  • 如何在 Spring GCP 中订阅多个 Google PubSub 项目?

    我想在 Spring Boot 应用程序中订阅多个 Google Cloud PubSub 项目 阅读完相关问题后如何使用 Spring Cloud 在一个 Spring Boot 应用程序中连接 配置两个 pubsub gcp 项目 ht
  • Maven编译错误:包不存在

    我正在尝试向现有企业项目添加 Maven 支持 这是一个多模块项目 前 2 个模块编译和打包没有问题 但我面临编译错误 我尝试在多个模块中使用相同的依赖项 我的结构是 gt parent gt pom xml gt module 1 gt
  • 在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?

    我试图更深入地理解我是否遗漏了一些关于 Java 何时需要变量初始化与简单声明的理解 在以下代码中 不需要为变量 row 赋值即可编译和运行 但变量 column 则需要赋值 注意 该程序没有任何用处 它已被修剪为仅显示此问题所需的内容 以
  • FocusEvent 没有获取 JFormattedTextField 的最后一个值,我如何获取它?

    我有两个JFormattedTextField我的物体JFrame目的 我想要通过这些值进行基本数学 加法 JFormattedTextField对象 我希望当焦点丢失第一个或第二个文本字段时发生这种情况 但当 focusLost 事件没有
  • 如何在java中进行多处理,以及预期的速度提升是多少?

    我是一个新手 使用 Java 对 csv 文件进行一些数据处理 为此 我使用 Java 的多线程功能 线程池 将 csv 文件批量导入到 Java 中 并对每一行执行一些操作 在我的四核处理器上 多线程大大加快了处理速度 我很想知道多处理如
  • 如何在 logback 中启动时滚动日志文件

    我想配置 logback 来执行以下操作 记录到文件 当文件达到 50MB 时滚动文件 仅保留 7 天的日志 启动时始终生成一个新文件 滚动 除了最后一项 启动卷 外 我一切都正常 有谁知道如何实现这一目标 这是配置
  • Encog:BasicNetwork:无需预先构建数据集的在线学习

    我正在尝试使用 encog 库作为强化学习问题的函数逼近器 更准确地说 我正在尝试启动并运行多层感知器 BasicNetwork 由于我的代理将根据我选择的任何 RL 算法以某种方式探索世界 因此我无法预先构建任何 BasicNeuralD

随机推荐

  • Pyaudio、portaudio 和 mac 10.7.5

    我在正确安装 pyaudio 时遇到问题 我为该项目设置了一个 virtualenv 我首先尝试安装 portaudio sudo port install portaudio 返回 gt Cleaning portaudio gt Sca
  • OpenCV 构建中的可选库提供什么?

    我正在尝试从源代码 最新的 SVN 主干 构建 OpenCV 并且有几个 可选 依赖项 它们本身的下载量将达到数 GB 尤其是使用 Qt 框架时 例如 CUDA 幽灵脚本 MIKTEX PYTHON EIGEN IPP JASPER JPE
  • 在没有 OpenMP 的计算机上忽略它

    我有一个使用 OpenMP 的 C 程序 该程序将在可能安装或未安装 OpenMP 的多台计算机上运行 我怎样才能让我的程序知道机器是否没有 OpenMP 并忽略它们 include
  • 从堆栈跟踪行号获取实际的 jsp 行号?

    这是堆栈跟踪 org apache jsp showcustomer jsp jspService showcustomer jsp java 128 org apache jasper runtime HttpJspBase servic
  • HTML5 CSS:行和调整大小

    下面的代码是响应式的 可以调整大小等 但我正在寻找一些真正简单的 CSS 来在桌面和移动设备上调整大小 我知道我可以使用标题链接 w3 css 中的 CSS 但必须有一种更好的方法来轻松地在桌面和移动设备上显示某些内容 移动设备默认显示内联
  • 打印/另存为 PDF(保留 CSS 布局)

    当我简单地打印 如在纸上 或将页面另存为 PDF 使用浏览器内置工具 时 CSS 会被完全忽略 我只会看到一行又一行的内容 有没有办法做到这一点 无需转换 HTML 2 PDF 图像 Thanks 这可能是因为你有media指定的选项
  • 当 SSM 代理变为活动状态时捕获事件

    我想在 SSM 的 Fleet Manager 中注册新的 EC2 实例时触发 lambda 这意味着可以使用 SSM 连接到该实例 但是我找不到在 EventBridge 中使用的模式 在 EventBridge 中 我尝试使用在文档中找
  • 在 SQL Server 2005 上违反 INSERT WHERE COUNT(*) = 0 上的 UNIQUE KEY 约束

    我正在从多个进程插入 SQL 数据库 这些进程有时可能会尝试将重复数据插入表中 我尝试以处理重复项的方式编写查询 但我仍然得到 System Data SqlClient SqlException Violation of UNIQUE K
  • nginx - laravel - hhvm-Fastcgi 出现错误 500

    I install a LEMP server in ubuntu 12 04 LTS 64 whit HHVM Fastcgi Service and i install laravel via laravel phar and test
  • 根据浏览器高度和宽度保持纵横比和字体大小?

    下面的代码附在window onresize resize The baseWidth and baseHeight在负载上读取作为计算的基础 这main变量只需将其设置到主 html 节点即可定义 字体设置在块元素上会导致所有的em基于其
  • ASP.NET Core 1.0 是否支持 ApiExplorer?如何使用它?

    ASP NET Core 1 0支持使用API Explorer吗 我无法找到任何有关它的文档或如何使用它 有人使用过它并且可以分享一些见解吗 Itay的回答帮助我得到了我想要的答案 Rob Lang 博士向任何需要使用 ApiExplor
  • ajax 调用的生命周期是多长?

    假设我在 javascript 中有这段代码 function doAnAjaxCall var xhr1 new XMLHttpRequest xhr1 open GET mylink true xhr1 onreadystatechan
  • 错误:运算符“++”的操作数必须是左值

    In C i j 在代码中工作正常 但是当我使用时 i j 我收到以下错误 Operand for operator must be an lvalue 为什么我会收到此错误 后自增要求操作数应该是可修改的左值但后自增的结果是prvalue
  • 会话超时混乱 - session.setMaxInactiveInterval(0)

    我是 JEE 的新手 这让我感到困惑 根据HttpSession html setMaxInactiveInterval int 间隔 http docs oracle com javaee 7 api javax servlet http
  • 共享 OpenGL VAO/VBO/等。通过 QGLWidget

    我正在使用 QGLWidgets 的 3 层层次结构在我的类似 CAD 的应用程序中的 5 个 OpenGL 视口之间共享着色器和顶点数据 根上下文用于编译应用程序范围的着色器 每个文档上下文用于共享模型顶点数据 视口上下文是实际进行渲染的
  • 如何在 XML 属性值中包含 &、<、> 等

    我想创建一个 XML 文件 用于存储 Java 程序的结构 我能够成功解析 Java 程序并根据需要创建标签 当我尝试将源代码包含在标签中时 问题就出现了 因为 Java 源代码可能使用大量实体引用和保留字符 例如 lt gt 我无法创建有
  • d3 过滤后无法附加完整数据

    我有一个项目的简化版本 我将其浓缩为以下片段 var margins top 20 bottom 300 left 100 right 100 var height 600 var width 1200 var totalWidth wid
  • 将 GraphML 转换为 GV 或 Dot 文件

    如何使用 graphml 文件作为输入在 graphviz 中绘制图形 I know graphviz附带graphml2gv为此目的 但是当我尝试从命令提示符运行此命令时 我收到此消息 cvtgxl not configured for
  • 如何在我的父 git 项目中使用 git 存储库?

    我尝试使用子模块将 github 存储库中的副本保留在我的第 3 方目录中 创建并获取文件后 当我从项目提交时 它只能看到文件夹 看不到文件 是的 文件在那里 有具体命令吗 在 GitHub 上 你只会看到一个灰色文件夹 https sta
  • Jackson 中的 readValue 和 readTree:何时使用哪个?

    我刚刚开始使用 Jackson JSON 库 Jackson 是一个非常强大的库 但它有非常广泛的 API 很多事情可以通过多种方式完成 这使得你很难在杰克逊找到自己的方式 如何知道什么是正确 最好的做事方式 为什么我要使用这个解决方案 S