jdbcTemplate - 从 JSON 列转换数据
jdbcTemplate - Convert data from JSON column
工具:Spring Booot v2.1.3.RELEASE、MySQL 5.7
我有 table,类型为 JSON 的列名为 "properties"。
我使用 jdbcTemplate.queryForList(sql) 方法从这个 table 中读取。
休息服务 returns 像这样:
[
{
"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" 对象是字符串类型。
如何强制 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
}
]
很抱歉JdbcTemplete
没有这个功能。您必须使用自己喜欢的 JSON 库自行将 JSON 字符串转换为 java 对象。
例如,在 Jackson
的情况下,您可以使用以下方法将任何 JSON 字符串转换为映射:
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
工具:Spring Booot v2.1.3.RELEASE、MySQL 5.7
我有 table,类型为 JSON 的列名为 "properties"。 我使用 jdbcTemplate.queryForList(sql) 方法从这个 table 中读取。 休息服务 returns 像这样:
[
{
"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" 对象是字符串类型。 如何强制 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
}
]
很抱歉JdbcTemplete
没有这个功能。您必须使用自己喜欢的 JSON 库自行将 JSON 字符串转换为 java 对象。
例如,在 Jackson
的情况下,您可以使用以下方法将任何 JSON 字符串转换为映射:
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