2

我有一个结构简单的 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') 

--根本不提供任何行

现在出现错误消息,但没有数据

4

1 回答 1

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 是一个数组,至少包含一个 object result。(可能有更多的对象,但你没有显示足够)。

这个对象result本身就是一个数组。因此,我们使用WITHin 组合AS JSON和 anotherAPPLY OPENJSON使用返回为 的嵌套数组A.result

于 2019-09-27T08:06:29.967 回答