【发布时间】:2018-04-23 00:26:30
【问题描述】:
我有一个 JSON 字符串存储在 SQL Server 表列中。该列名为 MSSG_RECIPS 并包含一个长文本字符串,例如:
`{"type":"email","recipient":"\"Artzer, Daniel J\" <DJArtzer@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Friedman, Brian\" <BFriedman@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Higgins, Laura L\" <LLHiggins@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Landenberger, Dan R\" <DRLandenberger@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Leitl, Scott\" <SLeitl@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"},{"type":"email","recipient":"\"Mendoza, Mario\" <MMendoza@emailaddr.com>","sentTS":"2017-11-08T20:58:14.600Z"}`
这个示例字符串说明了我的 JSON 格式,每个元素都以逗号分隔。
我能够解析这两种方式。一,使用 JSON_VALUE,我可以将属性检索为单独的列:
select
JSON_VALUE(mssg_recips, '$.type'),
JSON_VALUE(mssg_recips, '$.recipient'),
JSON_VALUE(mssg_recips, '$.sentTS'),
DOC_ID
from MY_JSON_TAB
但是,这只会返回 JSON 的第一个元素。
我尝试的另一种方法是:
select doc_id, value as EMAIL_RECIP
from MY_JSON_TAB
Cross Apply OPENJSON(MSSG_RECIPS)
这会将记录作为行而不是列返回,但同样只返回第一个元素。
可以说,我如何向下遍历以检索第二个、第三个等元素?
【问题讨论】:
标签: json sql-server