【发布时间】:2022-01-18 21:37:01
【问题描述】:
我在使用内置 MySQL JSON 函数从嵌套在 JSON 字符串中的 JSON 字符串中解析出值时遇到问题。
这是一个示例:
{
"SucceededAt": "2022-01-18T07:54:50.5548083Z",
"PerformanceDuration": "1463",
"Latency": "91",
"Result": "\"Request Body: {\\\"request\\\":[{\\\"id\\\":[{\\\"value\\\":\\\"1\\\"}],\\\"roles\\\":{\\\"receiver\\\":{\\\"id\\\":[{\\\"value\\\":\\\"1115559991\\\"}]}},\\\"details\\\":{\\\"adjustmentAmount\\\":{\\\"value\\\":7800}}}]}, Response Body:{\\\"response\\\":[{\\\"id\\\":[{\\\"value\\\":\\\"1\\\"}],\\\"parts\\\":{\\\"specification\\\":{\\\"characteristicsValue\\\":[{\\\"characteristicName\\\":\\\"MSISDN\\\",\\\"value\\\":\\\"9998885556\\\"},{\\\"characteristicName\\\":\\\"ResponseCode\\\",\\\"value\\\":\\\"1000\\\"},{\\\"characteristicName\\\":\\\"ResponseDescription\\\",\\\"value\\\":\\\"Operation successfully.\\\"}]}}}]}\""
}
我想从“结果”键/值中获取“请求”和响应“键/值对。
当我使用SELECT JSON_VALUE(Data, '$.Result') FROM [...] 从“Result”键中提取值时,它返回转义的字符串值(我认为还是 json-within-json)如下(使用双引号字符) :
"Request Body: {\"request\":[{\"id\":[{\"value\":\"1\"}],\"roles\":{\"receiver\":{\"id\":[{\"value\":\"114787601\"}]}},\"details\":{\"adjustmentAmount\":{\"value\":7800}}}]}, Response Body:{\"response\":[{\"id\":[{\"value\":\"1\"}],\"parts\":{\"specification\":{\"characteristicsValue\":[{\"characteristicName\":\"MSISDN\",\"value\":\"114787601\"},{\"characteristicName\":\"ResponseCode\",\"value\":\"1000\"},{\"characteristicName\":\"ResponseDescription\",\"value\":\"Operation successfully.\"}]}}}]}"
这是我坚持的步骤。
有没有办法使用内置的 MySQL JSON 函数来做到这一点?
【问题讨论】:
-
result的值不是有效的 JSON,它需要{}在对象周围。 -
啊,你是对的。所以基本上我需要清理 JSON_VALUE 的结果(添加 {},删除包装双引号,并替换转义字符,然后将其解析为自己的 JSON
-
是的,应该可以。它不会很漂亮,但是在 MySQL 中使用 JSON 没有什么是漂亮的。
-
select version();显示什么? -
@ysth - MySQL 版本是 8.0.23
标签: mysql json mysql-json