sql-server - SQL Server:在此 JSON 结构中选择 JSON 列
问题描述
我想知道是否可以从下面的 JSON 结构中选择数据?
[
{
"A": 6,
"Status": 1
},
{
"A": 3,
"Status": 0
},
{
"A": 6,
"Status": 1
},
{
"A": 7,
"Status": 0
}
]
根据此链接,数组/对象之前有属性。
"EmployeeInfo": {
"FirstName":"Jignesh",
"LastName":"Trivedi",
"Code":"CCEEDD",
"Addresses": [
{ "Address":"Test 0", "City":"Gandhinagar", "State":"Gujarat"},
{ "Address":"Test 1", "City":"Gandhinagar", "State":"Gujarat"}
]
}
例如,(从上面的链接获取示例),我们看到查询是从属性开始的,EmployeeInfo
这样查询就可以在这个查询中获取数据。
SELECT JSON_VALUE(@JSONData, '$.EmployeeInfo.FirstName')
所以我只是无法弄清楚如何从上面提供的结构中实现这一点,任何人都可以向我指出一些有用的示例代码。谢谢。
解决方案
您有两个选项来解析这个 JSON 数组:
- 使用
OPENJSON()
显式模式一次 - 获取每个项目的内容 - 使用
OPENJSON()
两次 - 获取每个项目的索引和内容
JSON:
DECLARE @json varchar(max) = '
[
{
"A": 6,
"Status": 1
},
{
"A": 3,
"Status": 0
},
{
"A": 6,
"Status": 1
},
{
"A": 7,
"Status": 0
}
]'
使用OPENJSON()
显式模式一次:
SELECT A, Status
FROM OPENJSON(@json) WITH (
A int,
Status int
)
结果:
A Status
6 1
3 0
6 1
7 0
使用OPENJSON()
两次:
SELECT
j1.[key] AS Index,
j2.A, j2.Status
FROM OPENJSON(@json) j1
CROSS APPLY OPENJSON(j1.[value]) WITH (
A int,
Status int
) j2
结果:
Index A Status
0 6 1
1 3 0
2 6 1
3 7 0
当然,您始终可以按索引访问数组项:
SELECT
JSON_QUERY(@json, '$[0]') AS Item,
JSON_VALUE(@json, '$[0].A') AS A,
JSON_VALUE(@json, '$[0].Status') AS Status
结果:
Item A Status
{"A": 6, "Status": 1} 6 1
推荐阅读
- flutter - 颤动的firebase云功能模拟器,随叫随到的功能不起作用
- android - 如何制作一个看起来像这样的首选项屏幕?
- orm - Doctrine : 为对象管理器设置查询提示
- python - 如何在循环中实例化不同的类?
- python - 使用 PyCharm 创建多语言应用程序 -> 从语言文件中导入变量以便能够读取代码
- java - 为什么是IDEA编译的,HTTP POST请求内容会自动转成GBK编码
- javascript - 如何使用 useState() 更新 react-chartjs-2 绘图
- java - 开发一个 JPA 实体,它采用 oneToMany 关系并将值转换为与值匹配的列数
- javascript - 在与另一个 div 对齐时响应地更改 div 大小
- c# - 将一个面板的所有控件复制到另一个面板中