我有一个结构简单的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')
-完全不发送任何行
现在出现错误消息,但没有数据
答案 0 :(得分:1)
尝试一下
提示:我必须添加一些右括号...
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是一个数组,包含至少一个对象result
。 (可能有更多的对象,但显示的对象不够多。)
此对象result
本身就是数组。因此,我们将WITH
与AS JSON
结合使用,并将另一个APPLY OPENJSON
与返回为A.result
的嵌套数组结合使用。