SELECT varchar 列 JSON 数据为 JSON

SELECT varchar column with JSON data as JSON

我有一个包含几列的 table,其中一列(我们称之为 EXIF)是 varchar 并且包含一个有效的 JSON 字符串。

我想 select table 和 FOR JSON 并且我想将 EXIF 列中的 JSON 数据作为JSON 结果。

现在 EXIF 列中的数据作为字符串返回并在结果中转义。

SELECT Col1, EXIF 
  FROM blah 
   FOR JSON AUTO

预计:

{
  "Col1": "something",
  "EXIF": {
    "GPS": "xxx"
  }
}

我得到的是什么

{
  "Col1": "something",
  "EXIF": "{\"GPS\": \"xxx\"}"
}

demo

您可以使用 JSON_QUERY() 函数,它还指示 JSON 对象的格式是否有效(如果无效,则 select 中的错误 returns =]语句),为了去掉那些转义字符,如

SELECT Col1, JSON_QUERY(EXIF) AS EXIF
  FROM blah 
   FOR JSON AUTO

Demo

已经解决。关键是将 JSON_QUERY 放在 CASE 之外。

不工作

SELECT Col1,
CASE WHEN ISJSON(EXIF)=1 THEN JSON_QUERY(EXIF) END AS EXIF2
FROM BLAH
FOR JSON AUTO

工作

SELECT Col1,
JSON_QUERY(CASE WHEN ISJSON(EXIF)=1 THEN EXIF END) AS EXIF2
FROM BLAH
FOR JSON AUTO