json - 如何在 SQL Server 中正确解压缩 JSON 数组
问题描述
我正在尝试使用 JSON,我想将一个用户添加到多个组中:将一个 JSON 数组插入一个表中。
理想情况下,JSON 应该是这样的:
'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": [{"0", "1", "5"}]
"Better_Groups": [{"ID":"0", "ID":"1", "ID":"5"}]
}'
目前,我可以像这样使用 JSON 来做到这一点:
'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": "1,2,3,4"
}'
然后用以下小曲“解压”它:
declare @groups varchar(1000)
select @groups = Groups from openjson(@json)
WITH
(
Groups nvarchar(100) '$.Groups'
)
print @groups
select value from string_split(@groups, ',')
它返回一个不错的小表,如下所示:
Value
1
2
3
4
问题 这是糟糕的 JSON,Web 开发人员会取笑我。
问题如何在 SQL Server 中正确解压缩 JSON 数组?
更新:
最终使用的 JSON 如下所示:
@json =
'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": "1,2,3,4",
"Better_Groups": ["0", "1", "5"]
}'
解决方案
假设“groups”元素是一个数组:
DECLARE @json NVARCHAR(MAX) =
N'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Better_Groups": ["0", "1", "5"]
}';
SELECT s.value
FROM OPENJSON(JSON_QUERY(@json, '$.Better_Groups')) s;
推荐阅读
- python - 删除早于 X 天的日志文件
- junit - 在 Junit 脚本中声明的静态驱动程序导致 Jmeter 多次加载失败
- mongodb - Azure 数据工厂 - 按日期筛选 Mongodb 源数据集
- azure-active-directory - 我可以从 azure 活动目录中获取最近创建的用户列表吗
- dart - Dart Process.kill 没有效果
- sql-server - 根据两列动态旋转
- regex - 通配符/正则表达式在snakemake中不起作用?
- html - 如何在加载字体之前使用内联元素设置字体图标的大小
- node.js - 如何弄清楚 node.js 代码是如何运行的?
- drupal - 链接图像并添加资产