使用 Jackson,使用排序键序列化 JSON

2023-12-20

我正在尝试用 Jackson 替换 groovy/grails 项目中的自定义 JSON(反)序列化。

我无法让 Jackson 输出一个打印精美的 JSON,其中的键按简单的“自然”字母顺序排序。 我已经尝试过这个(以及许多变体):

mymap = [ ... ] // Some groovy map
def mapper = new ObjectMapper()
mapper.configure(SerializationConfig.Feature.SORT_PROPERTIES_ALPHABETICALLY, true)
def jsonstring = mapper.defaultPrettyPrintingWriter().writeValueAsString(mymap)

但 Jackson 顽固地生成一个 JSON,其中密钥似乎是随机顺序的。 我尝试使用 TreeMap 更改“mymap”的类型,在这种情况下,所有键都按预期正确排序。

我想知道是否有办法对键进行排序without将上面的“mymap”更改为 TreeMap(并递归地更改其所有地图值...)。

SORT_PROPERTIES_ALPHABETICALLY 似乎就是为了做到这一点,但由于某种原因它没有这样做。 你知道这是为什么吗?我上面做错了什么吗?

我尝试过 Jackson 1.8.3、1.8.8 和 1.9.5,结果相同(随机密钥)。


正如 @tim_yates 所说,这不适用于地图键。

你可以使用

mapper.configure(SerializationConfig.Feature.ORDER_MAP_ENTRIES_BY_KEYS, true)

在较新的版本 (>= 2.6.1) 中,API 更改为:

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

使用 Jackson,使用排序键序列化 JSON 的相关文章

随机推荐

  • 为什么我的 Visual Studio Win32 项目需要安装 .NET 3.5 SP1?

    使用 Visual Studio 2008 我创建了一个 C Win32 http en wikipedia org wiki Windows API项目 为了发布该程序 我在同一解决方案中创建了一个 Visual Studio 安装项目
  • 删除 FASTA 文件中的换行符

    我有一个 fasta 文件 其中序列用换行符分隔 我想删除换行符 这是我的文件的示例 gt accession1 ATGGCCCATG GGATCCTAGC gt accession2 GATATCCATG AAACGGCTTA 我想把它转
  • PHP - 访客在线计数器

    我有以下代码来统计我的 PHP 网站上的访问者数量 它在使用 WampServer 的本地开发计算机上运行良好 但当我将文件上传到我的托管帐户进行测试时 我意识到它无法正常工作 我得到的数字非常高 并且还注意到会话永远不会被删除 因此它们只
  • Asp.net MVC Razor 页面上有多个表单

    Yo 我的网站上有一个注册页面 页面顶部是现有用户的登录表单 主区域有登记表 登录区域是部分视图 model ViewModels LoginViewModel注册区域也是部分的 model ViewModels RegViewModel
  • StreamProvider 与 RiverPod 无法正常工作(尝试从 Provider 迁移)

    我试图通过将简单的 FireStore auth Provider 示例迁移到 RiverPod 来了解 RiverPod 这是我的身份验证服务 import package firebase auth firebase auth dart
  • JSONP 长轮询始终加载

    我正在使用 JSONP 进行长轮询 而 Firefox 不断弹出 正在加载 微调器 使页面看起来像是尚未完成加载 有办法抑制这种情况吗 我被告知 Orbited 团队有一些技巧可以抑制这种情况 但浏览 Orbited js 代码我无法弄清楚
  • Pymongo 批量插入不起作用

    我正在按照教程进行操作http api mongodb org python current tutorial html http api mongodb org python current tutorial html用于批量插入 但是
  • 更改 ggplot 中的线宽,而不是大小

    我看到几篇关于改变线宽 https stackoverflow com questions 14794599 how to change line width in ggplot在 ggplot 中 这些答案虽然对OP来说内容丰富且有效 但
  • 使用引用字段值进行聚合中的 Mongodb 正则表达式

    注意 我使用的是 Mongodb 4 我必须使用聚合 因为这是更大聚合的一步 Problem 如何在集合文档中查找包含以同一文档中另一个字段的值开头的字段 让我们从这个集合开始 db regextest insert first Pizza
  • VBA Excel 中的弹出图表

    我想知道是否有一种方法可以根据特定工作表中找到的值 通过按按钮在 Excel 中创建弹出图表 最好的方法是能够在 VBA 中完成它 我一直在研究但找不到任何真正的解决方案 有什么建议么 你 你这个幸运儿 p 由于我有空 我为您创建了一个基本
  • 字符串文字:它们去了哪里?

    我对字符串文字的分配 存储位置感兴趣 我确实找到了一个有趣的答案here https stackoverflow com questions 51592 is there a need to destroy char string or c
  • 自托管 Azure DevOps Agents 卷映射

    在执行容器化任务时 在 K8s 中运行自托管 docker 构建代理时 出现以下错误 我已按照文档进行操作here https learn microsoft com en us azure devops pipelines agents
  • UILabel 优于 UIProgressView,具有多种颜色

    所以我还没有这样做 我正在尝试弄清楚如何做到这一点 所以我制作了一个 UITableView 每个单元格都有一个关联的 NSTimer 现在 在每个自定义 UITableViewCell 中 我都有一个 UIProgressView 作为背
  • 一旦这些容器执行的脚本调用 exit() ,如何退出“docker run”容器

    我有一个 docker compose 设置 分三步部署 构建所有容器并dc up d dc是一个别名docker compose 创建数据库 dc run web usr local bin python create db py 使用以
  • while(i--) s+= a[i]; 是吗?包含 C 和 C++ 中未定义的行为?

    考虑简单的代码 include stdio h define N 10U int main int a N 0 unsigned int i N int s 0 Fill a while i s a i printf Sum is d n
  • 从哪里可以更改 App Store 中已有应用程序的刷新率?

    我在 iPhone 和 Android 应用商店中有一个应用程序 他们有横幅广告和插页式广告 我记得设置刷新率时设置过一次 但现在找不到了 我检查了我的管理员帐户 但找不到可以更改的位置 在 AdMob 网站中的哪里可以找到此设置 登录Ad
  • 堆栈服务容器动态主机名

    我正在从 Docker Cloud 迁移到纯 Docker Swarm 设置 我缺少的一件事是容器如何将主机名设置为 SERVICE NAME SLOT NUMBER 是否可以在 Swarm 堆栈服务中动态设置主机名 容器名称 在您的堆栈
  • 使用 HTML5 CSS3 强制 iframe YouTube 视频居中并在后台完全覆盖屏幕

    如何强制使用 HTML5iframeYouTube视频居中适配 覆盖全屏窗口背景使用CSS3 HTML最终Java 比如说 贝宝 it http paypal it 主页背景或 unity3d com 5 http unity3d com
  • 更改表 ASP.NET 中复选框列表的 css 样式

    我想将 asp net 中复选框的 css 样式更改为与 w3school 上的样式相同的样式https www w3schools com howto tryit asp filename tryhow css custom checkb
  • 使用 Jackson,使用排序键序列化 JSON

    我正在尝试用 Jackson 替换 groovy grails 项目中的自定义 JSON 反 序列化 我无法让 Jackson 输出一个打印精美的 JSON 其中的键按简单的 自然 字母顺序排序 我已经尝试过这个 以及许多变体 mymap