如何从 sql 查询中提取 JSON?
How to extract JSON from sql query?
我的查询如下所示:
select MESSAGE, OFFSET from SRV_TABLE where STATUS='404';
我想重试失败的消息,但消息是 json 字符串,偏移量是常规字符串。我需要提取 json 消息和偏移字符串,然后遍历每一行。我该怎么做?现在我正在做这样的事情:
public void retryFailedMessages() {
JsonNode failedMessages = service.getFailedMessages();
Iterator<JsonNode> iter = failedMessages.elements();
while(iter.hasNext()) {
JsonNode message = iter.next();
String mess = message.get("MESSAGE").toString();
String offset = message.get("OFFSET").toString();
service.retry(mess, offset);
}
}
//服务
String responseString = "";
JsonNode responseObj = null;
List<String> responseList;
try{
responseLIst = dataAccessLayer.getFailedMessages();
responseString = buildQueryResult(responseList);
responseObj = objectMapper.readTree(responseString);
} catch( Exception e) {
e.printStackTrace();
}
return responseObj;
buildQueryResult() 只是将所有字符串附加在一起,以便映射器可以一起读取它。映射器忽略偏移量并且不将其包含在 json 中,因为它不是有效的 json。如何保留偏移量和消息并将两者传递给 service.retry() 方法?
您需要将 string/json 转换为 POJO 或以其他方式将其转换为对象。我建议您使用 Jackson 库并将其映射到 pojo。
另一种方法是使用数据库中的一些工具直接查询:
select
JSON_VALUE(MESSAGE, '$.your.query') as query,
JSON_VALUE(MESSAGE, '$.another.query') as another,
OFFSET
from SRV_TABLE where STATUS='404';
通过这种方式,您可以在代码中将值作为字符串处理。
可以在这里阅读更多内容:https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15
我的查询如下所示:
select MESSAGE, OFFSET from SRV_TABLE where STATUS='404';
我想重试失败的消息,但消息是 json 字符串,偏移量是常规字符串。我需要提取 json 消息和偏移字符串,然后遍历每一行。我该怎么做?现在我正在做这样的事情:
public void retryFailedMessages() {
JsonNode failedMessages = service.getFailedMessages();
Iterator<JsonNode> iter = failedMessages.elements();
while(iter.hasNext()) {
JsonNode message = iter.next();
String mess = message.get("MESSAGE").toString();
String offset = message.get("OFFSET").toString();
service.retry(mess, offset);
}
}
//服务
String responseString = "";
JsonNode responseObj = null;
List<String> responseList;
try{
responseLIst = dataAccessLayer.getFailedMessages();
responseString = buildQueryResult(responseList);
responseObj = objectMapper.readTree(responseString);
} catch( Exception e) {
e.printStackTrace();
}
return responseObj;
buildQueryResult() 只是将所有字符串附加在一起,以便映射器可以一起读取它。映射器忽略偏移量并且不将其包含在 json 中,因为它不是有效的 json。如何保留偏移量和消息并将两者传递给 service.retry() 方法?
您需要将 string/json 转换为 POJO 或以其他方式将其转换为对象。我建议您使用 Jackson 库并将其映射到 pojo。
另一种方法是使用数据库中的一些工具直接查询:
select
JSON_VALUE(MESSAGE, '$.your.query') as query,
JSON_VALUE(MESSAGE, '$.another.query') as another,
OFFSET
from SRV_TABLE where STATUS='404';
通过这种方式,您可以在代码中将值作为字符串处理。
可以在这里阅读更多内容:https://docs.microsoft.com/en-us/sql/t-sql/functions/json-value-transact-sql?view=sql-server-ver15