访问在mySql查询中转义了JSON

时间:2016-01-21 01:37:43

标签: mysql json

我正在运行这样的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版本:

enter image description here

1 个答案:

答案 0 :(得分:0)

我知道这篇文章很旧,但是可能有人在寻找答案。

您可以使用JSON_UNQUOTE函数在所有json列上运行更新语句。这将使列变成干净的json,然后您可以在mysql中使用内置的JSON_ *函数。

此外,如果您有权访问应用程序的这一部分,请检查如何插入数据。可能不需要引号,并且应该/可以将插入逻辑更改为不包括引号。