json - OPENJSON 将值列转换为多行不起作用
问题描述
我有一个结构简单的 JSON 文件。我尝试从这个 JSON 文件中将数据提取到行中。
JSON 文件开头为:
[{"result":
[{"country":"Germany",
"parent":"xxxx",
"city":"Reitbrook",
"latitude":"",
我试过这段代码,都成功了。查看最后 3 条语句及其结果。我会在 SELECT 最后一条语句中期待多条记录。我究竟做错了什么?
DECLARE @details VARCHAR(MAX)
Select @details =BulkColumn FROM OPENROWSET
(BULK 'folder/cmn_location', DATA_SOURCE='blogstorage', SINGLE_CLOB) as JSON;
IF (ISJSON(@details) = 1)
BEGIN PRINT 'Imported JSON is Valid' END
ELSE
BEGIN PRINT 'Invalid JSON Imported' END
SELECT @details as SingleRow_Column
--delivers one row Where
--SingleRow_Column=[{"result":[{country":"Germany","parent":.....
SELECT * FROM OPENJSON(@details, '$')
--delivers one row. Where
--Key=0, value={"result":[{"country":"Germany","parent":"xxx".....
SELECT * FROM OPENJSON(@details, '$.result')
--根本不提供任何行
现在出现错误消息,但没有数据
解决方案
像这样试试
提示:我必须添加一些右括号...
DECLARE @YourJSON NVARCHAR(MAX)=
N'[{"result":
[{"country":"Germany",
"parent":"xxxx",
"city":"Reitbrook",
"latitude":""}]}]';
SELECT B.*
FROM OPENJSON(@YourJson) WITH(result NVARCHAR(MAX) AS JSON) A
CROSS APPLY OPENJSON(A.result) WITH(country NVARCHAR(1000)
,parent NVARCHAR(1000)
,city NVARCHAR(1000) ) B;
简而言之:
您的 JSON 是一个数组,至少包含一个 object result
。(可能有更多的对象,但你没有显示足够)。
这个对象result
本身就是一个数组。因此,我们使用WITH
in 组合AS JSON
和 anotherAPPLY OPENJSON
使用返回为 的嵌套数组A.result
。
推荐阅读
- c - 外部 DVD createProcess 返回 998
- javascript - 加号和减号按钮 (Javascript)
- powershell - 带有配置脚本的 PowerShell
- java - istio 错误:详细信息:java.io.IOException: Unknown apiVersionKind
- python - 将文件从远程主机上的 jupyter notebook 写入本地主机
- swift - 样式视图传递给 SwiftUI 中的自定义视图
- python - 当一列中有多行重复值时选择第一行
- sql - 有没有办法通过SQL或PL/SQL根据Oracle中的常用表名一次查询多个表
- mongodb - 如何更新数组中匹配条件的特定对象
- angular - 来自 Realtime Firebase 的数据显示在控制台中,但不在 html 页面中