【问题标题】:jdbcTemplate - Convert data from JSON columnjdbcTemplate - 从 JSON 列转换数据
【发布时间】:2019-07-17 12:17:15
【问题描述】:

工具:Spring Boot v2.1.3.RELEASE、MySQL 5.7

我有一个名为“属性”的 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
  }
]

如您所见,“属性”对象是字符串类型。 如何强制 jdbcTemplete 将 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
  }
]

【问题讨论】:

    标签: mysql spring-boot jdbctemplate


    【解决方案1】:

    很抱歉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
    

    【讨论】:

    • 我就是这么想的。谢谢你,肯。
    • 很高兴听到。如果您认为我的回答有用,请考虑点赞并接受我的回答:P
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2019-02-08
    • 1970-01-01
    • 2023-02-23
    相关资源
    最近更新 更多