jdbcTemplate - 从JSON列转换数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbcTemplate - 从JSON列转换数据相关的知识,希望对你有一定的参考价值。

工具:Spring Boot v2.1.3.RELEASE,mysql 5.7

我有一个名为“properties”的JSON类型的表。我使用jdbcTemplate.queryForList(sql)方法从这个表中读取。休息服务返回如下内容:

[
  {
    "id": 1,
    "name": "users",
    "properties": "{"prop1": "value1"}",
    "description": "smpl descr1",
    "log_enabled": false
  },
  {
    "id": 2,
    "name": "members",
    "properties": null,
    "description": "sample description 2",
    "log_enabled": true
  }
]

如您所见,“properties”对象是String的类型。如何强制jdbcTemplate将数据从JSON列转换为JSON而不是String?

预期结果:

[
  {
    "id": 1,
    "name": "users",
    "properties": {
      "prop1": "value1"
    },
    "description": "smpl descr1",
    "log_enabled": false
  },
  {
    "id": 2,
    "name": "members",
    "properties": null,
    "description": "sample description 2",
    "log_enabled": true
  }
]
答案

对不起,JdbcTemplete没有这样的功能。您必须使用自己喜欢的JSON库将JSON字符串转换为java对象。

例如,在Jackson的情况下,您可以使用以下命令将任何JSON字符串转换为Map:

ObjectMapper mapper = new ObjectMapper();
String json = "{"prop1": "value1" , "prop2": 123}";

Map<String,Object> result = mapper.readValue(json,new TypeReference<Map<String,Object>>() {});

result.get("prop1") // "value1"
result.get("prop2") // 123

以上是关于jdbcTemplate - 从JSON列转换数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 JdbcTemplate 从数据库中读取大数据并通过 api 公开?

postgres 将字符串插入数字列 - 不会发生自动类型转换

快速将 JSON 列转换为 Pandas 数据框

如何将 json 字符串数据类型列转换为配置单元中的映射数据类型列?

将带有 json 字符串的数据框列转换为不同的列

Spring JdbcTemplate查询实例