Jackson JSON 键作为 Java 中的值

2024-06-23

我在 Spring MVC 应用程序中使用 Jackson。我想使用字符串值作为 Java POJO --> JSON 的键名

"record": {
        "<Dynamic record name String>": {
          "value": { 
          ....
          }
      }
 }     

因此动态记录名称字符串可以是“abcd”、“xyz”或任何其他字符串值。我如何定义我的“记录”POJO 以获得这样的密钥?


不幸的是,你不能拥有dynamicJava 类中的字段(与其他一些语言不同),因此您有两种选择:

  1. Using Map https://docs.oracle.com/javase/8/docs/api/java/util/Map.htmls
  2. 使用 JSON 对象(即JsonNode http://fasterxml.github.io/jackson-databind/javadoc/2.9/com/fasterxml/jackson/databind/JsonNode.html以杰克逊为例)

假设,您有这样的数据:

{
    "record": {
        "jon-skeet": {
            "name": "Jon Skeet",
            "rep": 982706
        },
        "darin-dimitrov": {
            "name": "Darin Dimitrov",
            "rep": 762173
        },
        "novice-user": {
            "name": "Novice User",
            "rep": 766
        }
    }
}

创建两个类来捕获它,一个用于用户,另一个用于对象本身:

用户.java:

public class User {
    private String name;
    private Long rep;

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public Long getRep() { return rep; }

    public void setRep(Long rep) { this.rep = rep; }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", rep=" + rep +
                '}';
    }
}

数据.java:

public class Data {
    private Map<String, User> record;

    public Map<String, User> getRecord() { return record; }

    public void setRecord(Map<String, User> record) { this.record = record; }

    @Override
    public String toString() {
        return "Data{" +
                "record=" + record +
                '}';
    }
}

现在,解析 JSON(我假设有一个data.json文件位于类路径的根目录中):

public class App {
    public static void main(String[] args) throws Exception {
        final ObjectMapper objectMapper = new ObjectMapper();

        System.out.println(objectMapper.readValue(App.class.getResourceAsStream("/data.json"), Data.class));
        System.out.println(objectMapper.readTree(App.class.getResourceAsStream("/data.json")));
    }
}

这将输出:

Data{record={jon-skeet=User{name='Jon Skeet', rep=982706}, darin-dimitrov=User{name='Darin Dimitrov', rep=762173}, novice-user=User{name='Novice User', rep=766}}}
{"record":{"jon-skeet":{"name":"Jon Skeet","rep":982706},"darin-dimitrov":{"name":"Darin Dimitrov","rep":762173},"novice-user":{"name":"Novice User","rep":766}}}

如果出现Map您可以使用一些静态类,例如User在这种情况下,或者通过使用完全动态Maps of Maps (Map<String, Map<String, ...>>。但是,如果您发现自己使用了太多地图,请考虑切换到JsonNodes。基本上,它们是相同的Map并专门为高度动态的数据“发明”。不过,以后你和他们一起工作会很困难......

看一下我给你准备的完整例子here https://github.com/madhead/playgrounds/tree/master/46984314.

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

Jackson JSON 键作为 Java 中的值 的相关文章

  • 在记录活动中使用 readConfiguration 方法

    为了在小型 Java 桌面应用程序中使用日志记录 我试图深入了解一些方法的操作 我使用一个非常愚蠢的小Java程序来测试它们 特别是 在测试 LogManager readConfiguration 方法的行为时 我发现了一些奇怪的事情 在
  • 如何选择主题与队列

    当我们设计应用程序时如何选择Topic Queue类型实现 我知道 a 如果有多个消费者使用该消息 则使用 Topicb 如果只有一个消费者则使用Queue 请提供更多需要考虑的点 比如并发 消息持久化 负载均衡等等 Thanks Rw 如
  • uniVocity 不会将第一列解析为 beans

    我试图在 uniVocity parsers 的帮助下从 GTFS zip 读取 CSV 文件 但遇到了一个我无法解决的问题 由于某种原因 某些 CSV 文件的第一列似乎无法正确解析 例如 在 stops txt 文件中 如下所示 stop
  • HQL - 分页的行标识符

    有谁知道HQL是否有一个关键字来标识行 例如ROWID或ROWNUM 我想使用 HQL 实现分页 但我无法使用 setMaxResult 或 setFirstResult 因为我不直接使用会话对象 因此不使用 Query 对象 而只是将查询
  • 在java中将HTML转换为RTF?

    我需要将 HTML 转换为 RTF 我正在使用以下代码 private static String convertToRTF String htmlStr OutputStream os new ByteArrayOutputStream
  • 使用 java.util.Set 时的 Jackson bug(或功能!?) - mySet.size() 始终为 1

    我正在使用 Jackson 2 2 0 和 Spring 3 2 0 以及 Hibernate 4 2 2 我最近不得不通过 POST 向服务器发送一组对象 cancelationDate 2013 06 05 positions pric
  • spring Kafka模型不在可信包中

    我正在研究微服务spring Kafka 2 1 5 and spring boot 2 0 5 第一个服务将向卡夫卡产生一些消息 第二个服务将消耗它们 在消耗时我遇到了问题 Caused by java lang IllegalArgum
  • 如何从资源服务器中的 Spring Security OAuth2 Boot 中提取声明?

    我有一个使用 Net Core 内置的授权服务器身份服务器4 https identityserver4 readthedocs io en latest 它正在按预期工作 从 Node Js 和 Net 授权客户端和资源 现在我尝试添加
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client
  • 获取 Spring Boot 中当前活动数据源的引用

    我想通过实现数据库数据初始化DataSourceInitializer 我将这些方法放在我的 Spring Boot 主方法下面 但似乎它根本没有被执行 我尝试故意删除字符只是为了触发一个错误来确认执行 什么也没有发生 Configurat
  • Log4j 2.x 如何实现惰性参数求值?

    鉴于Java 参数评估机制 http docs oracle com javase specs jls se8 html jls 15 html jls 15 12 4 2 如何Log4j 2 x实施惰性评估 https logging a
  • 运行 mvn install 时如何指定 spring.profiles.active

    在这个使用 Spring 的 Web 应用程序中 我为不同的部署环境创建了多个应用程序属性文件 他们指定不同的数据库连接配置 application dev properties application qa properties appl
  • double 或 BigDecimal 会溢出吗?

    Java 8 给了我们Math addExact https docs oracle com javase 8 docs api java lang Math html addExact int int 适用于整数 但不适用于小数 是否有可
  • Apache HTTPClient SSLPeerUnverifiedException

    使用 Apache HttpClient 4 2 1 使用从基于表单的登录示例复制的代码 http hc apache org httpcomponents client ga examples html http hc apache or
  • 面临 process.start(); 的问题在 Android 棒棒糖中

    面临一个问题process start 在 Android 棒棒糖中 我在服务中遇到了 android lollipop 后台进程的问题 我的代码在 KitKat 之前工作正常 我有一个ProcessBuilder pBuilder并向其中
  • 为什么 (Oracle) JVM 对内存使用有固定上限 (-Xmx)?

    本着提问的精神Java 为什么存在 MaxPermSize https stackoverflow com questions 3356005 java why does maxpermsize exist 我想问一下为什么Oracle J
  • StringBuilder - 重置或创建新的

    我有一个条件 StringBuilder 不断存储与大型平面文件 数百 MB 中的模式匹配的行 但是 在达到条件后 我将 StringBuilder 变量的内容写入文本文件 现在我想知道是否应该通过重置对象来使用相同的变量 gt strin
  • 如何显示 javadoc 代码块中的泛型?

    我有一个 javadoc 代码块 我想在其中编写一个包含泛型的代码示例 如下所示 public interface SomeInterface
  • Java:当计时器处于活动状态时,JSplitPane 将顶部面板的内容复制到底部面板

    所以我有一个 JSplitPane 和两个 JPanel 一个在顶部 一个在底部 在这两个面板中 我重写了paintComponent方法并添加了我自己的图形 在底部面板中 我想添加动画 当面板不重新绘制时 这很好 但是一旦计时器 java
  • 从 google play 中提取统计信息

    我正在建立一些统计数据 并希望获得来自 google play 应用程序商店 的统计数据 最受欢迎 下载量 价格等信息 有谁知道是否有这个 API 或者我必须自己抓取它 有一个名为 android market api 的项目http co

随机推荐

  • 错误运算符 new[] :函数不接受 1 个参数

    我有重载运算符的代码new 下面的代码在 Linux gcc4x 下运行良好 但在 Windows Visual C 2008 Express Edition 下运行不佳 Visual Studio 2008 Express Edition
  • 通过浏览器以编程方式确定 DPI?

    我想以编程方式确定用户显示器的 DPI 以便以精确的单位数 厘米 英寸 显示网页 我知道这是一个奇怪的请求 这是一个可视化研究项目 它是一种控制 目前 我们通过让用户将信用卡放置在屏幕上并将可调整大小的 div 通过 Mootools 与真
  • 如何从顶点图表中删除图例、标签和所有数字

    我已经尽力了 如果有人能帮助我 那就太好了 我希望图表上的数字和图例消失 图例和数据标签可以通过以下方式禁用 const options dataLabels enabled false legend show false EDIT 如果您
  • 将斯坦福情感分析与java集成时出现错误

    我正在使用斯坦福情感 nlp 库和 java 进行情感分析 但是当我执行代码时 我收到错误 无法弄清楚 我的代码如下 package com nlp import java util Properties import edu stanfo
  • Chrome Sockets API 在 Chrome 操作系统(与 Ubuntu、Windows)上的行为有何不同?

    我有一个示例 Chrome 打包应用程序 它使用 Chrome 套接字 API 来执行 DNS 服务发现 繁重的工作是从这里的例子中借来的 https github com GoogleChrome chrome app samples t
  • 如何获取今天或昨天的时间 17:00:00?

    如果今天的 17 00 00 已经过去 那么它应该是今天的日期 否则 昨天的日期 今天的时间我得到了 test datetime datetime now replace hour 17 minute 0 second 0 microsec
  • 如何使用 PyQt4 禁用窗口最大化图标?

    我想知道如何禁用pyqt4中的窗口最大化按钮 我目前使用 QWidget setFixedSize self QSize 来防止用户窗口调整大小 但是最大化按钮仍然处于启用状态 按下时会导致应用程序移动到屏幕的左上角 我基本上想复制 Win
  • 如何避免以明文形式存储 tomcat 的 server.xml 数据源资源定义的密码?

    tomcat中的资源定义server xml看起来像这样
  • Swift 3 IF 条件中的可选链接错误?

    这段代码在 Swift 2 3 中运行得很好 我不明白为什么我必须解开TestClass检查数字是否大于 4 这是链接选项的全部要点 以节省额外的调用 现在为了使这项工作正常进行 我必须检查是否testClass nil 或使用隐式解包if
  • Android远程数据库

    我正在开发一个需要连接到中央数据库的 Android 应用程序 用户应该能够通过应用程序访问记录并将记录添加到数据库中 数据本身相当简单 每条记录都由许多文本字段组成 该数据库将专门为应用程序开发 并且只需要通过应用程序进行访问 初步阅读似
  • 带有 kableExtra 的表格标题

    我想包含表的标题和列的正确名称 我该如何使用 kableExtra 函数来做到这一点 kable tab 211 220 gt kable styling bootstrap options c striped hover enter im
  • 通过多个换行符分割文件

    假设您有以下输入文件 Some text It may contain line breaks Some other part of the text Yet an other part of the text 并且您想要迭代每个文本部分
  • ASP.NET MVC5:想要使用模型绑定更新集合中的多个项目

    所以我有一个用户对象的集合 它应该是可批量编辑的 同时编辑许多用户 我使用实体框架将用户输入保存到数据库中 控制器方法从表单获取的集合为 null 为什么 另外 BindAttribute 是否可以像我的代码中那样与集合一起使用 View
  • Objective-C 右填充

    大家好 希望有人可以提供帮助 我正在浏览网络 但似乎没有什么真正有意义的 S 所以我有一个字符串可以说 123 我想使用如下函数 padr 123 5 x 结果应该是 123xx 抱歉 Objective C 在处理字符串时是一场噩梦 S
  • 发布Windows窗体应用程序如何更改安装路径

    我已经构建了一个 Windows 窗体应用程序 并发布了客户端安装 安装安装文件时 应要求用户选择安装目录路径 相反 它安装在默认路径中 如下所示 C Users Mysys t AppData Local Apps 2 0 434YBBV
  • 上三角中的所有零值

    我有以下代码 afs in sound lt stringdistmatrix soundexcode termen soundexcode termen method hamming 我的矩阵如下所示 0 1 inf inf 1 0 0
  • cast_sender.js 错误:无法在 Chrome 中加载资源:net::ERR_FAILED

    我最近开始收到以下控制台错误 但没有发生任何代码更改 我最近没有安装任何扩展 Failed to load resource net ERR FAILED chrome extension enhhojjnijigcajfphajepfem
  • 在oracle 10g Express版中创建Schema

    我已经安装了oracle 10g Express Edition 但没有找到选项 创建架构 Oracle 10g Express 版本中是否有创建模式的选项 否则我必须安装其他oracle 10g 创建 Oracle 10g 架构 我必须安
  • 无法访问将其从 GH-pages 传递到 React App 的环境秘密变量

    我正在尝试在 Github pages 部署的 ReactApp 中使用环境变量 该变量是通过添加进程 env并开始于REACT APP按照文档规定 export default class WeatherService construct
  • Jackson JSON 键作为 Java 中的值

    我在 Spring MVC 应用程序中使用 Jackson 我想使用字符串值作为 Java POJO gt JSON 的键名 record