我正在运行这样的mySQL查询:
select *
from resError
where errorDescription like '%ENSURE NAME DOB AND GENDER EXIST IN SSR DOCS%'
这会返回如下结果:
+-----------+--------------------------------------------+
| id | errorDescription |
+-----------+--------------------------------------------+
| 1 | {\r\n \"details\": \"INVALID - ENSURE.... |
+-----------+--------------------------------------------+
errorDescription
字段的全文是这样的转义json对象:
{\ r \ n \“details \”:\“INVALID - 确保名称DOB和GENDER存在于SSR DOCS for US \”,\ r \ n \“session \”:{\ r \ n \“flightType \“:\”Worldspan \“,\ r \ n \”pt \“:\”hf \“,\ r \ n \”fl \“:\”PDX \“,\ r \ n \”tl \“ :\“PHX \”,\ r \ n \“xmlConnectionId \”:\“9 \”,\ r \ n \“FlightDetails \”:{\ r \ n \“IssuingCarrierCode \”:\“US \”, \ r \ n \“RestrictedTicket \”:\“1 \”,\ r \ n},\ r \ n \“reservationId \”:21614475,\ r \ n \“PNR \”:\“LQ8O7M \”\ r \ n} \ r \ n}
我遗漏了更多的值,列出的是我唯一关心的值
未转义的JSON对象看起来像这样
{
"details": "INVALID - ENSURE NAME DOB AND GENDER EXIST IN SSR DOCS FOR US",
"session": {
"flightType": "Worldspan",
"pt": "hf",
"fl": "PDX",
"tl": "PHX",
"xmlConnId": "9",
"FlightDetails": {
"IssuingCarrierCode": "US",
"RestrictedTicket": "1",
},
"resId": 2161,
"PNR": "LQ8RRM"
}
}
如何访问errorDescription字段文本中的值,以便得到如下结果?
+----+-----------+----+-----+-----+-----------+--------------------+------------------+--------+
| id | flightType| pt | fl | tl | xmlConnId | IssuingCarrierCode | RestrictedTicket | PNR |
+----+-----------+----+-----+-----+-----------+--------------------+------------------+--------+
| 1 | Worldspan | hf | PDX | PHX | 9 | US | 1 | LQ8RRM |
+----+-----------+----+-----+-----+-----------+--------------------+------------------+--------+
我很乐意将存储的数据标准化,遗憾的是,这不是一种选择。我的部门没有对该表的写访问权限,拥有它的部门希望它保持原样。这不是我需要再次运行的查询,因此性能不是主要问题。
这是我正在使用的mySQL版本:
答案 0 :(得分:0)
我知道这篇文章很旧,但是可能有人在寻找答案。
您可以使用JSON_UNQUOTE函数在所有json列上运行更新语句。这将使列变成干净的json,然后您可以在mysql中使用内置的JSON_ *函数。
此外,如果您有权访问应用程序的这一部分,请检查如何插入数据。可能不需要引号,并且应该/可以将插入逻辑更改为不包括引号。