【发布时间】:2019-03-04 10:38:37
【问题描述】:
我已经在下面创建了函数ParseJson:
create function ParseJson(
@json nvarchar(max))
returns @tempTable table (topKey nvarchar(max), [Key] nvarchar(max), [Value] nvarchar(max))
as
begin
insert
@tempTable
select
x.[key] topKey
, y.[key]
, y.[value]
from openjson(@json) x
cross apply openjson(x.[value]) y
return
end
-- execute
select * from ParseJson(@json)
我定义了一个变量@json,它不是一个数组字符串:
set @json =
N'{
"Chapter":
{
"Section":"1.1"
, "Title":"Hello world."
}
}'
然后我执行查询我会得到结果:
如果我重置变量 @json 这是一个数组字符串:
declare @json nvarchar(max)
set @json =
N'{
"Chapter":[
{
"Section":"1.1"
, "Title":"Hello world."
}
,
{
"Section":"1.2"
, "Title":"Be happy."
}
]
}'
我希望我能得到下面的结果:
我不知道我期望的结果是否合理?
如何调整功能以满足预期?
【问题讨论】:
-
请问您的 SQL Server 版本是多少?如果您的版本高于(2016),请查看那些帖子:docs.microsoft.com/en-us/sql/relational-databases/json/…; docs.microsoft.com/en-us/sql/relational-databases/json/…; stackoverflow.com/questions/2867501/parse-json-in-tsql
-
Parse JSON in TSQL的可能重复
-
虽然您可以尝试在“通用”函数中捕获逻辑,但最终会得到一堆特殊的大小写,用于在解析之前检查结构,使其无法毕竟一般。根据需要对每个查询单独解析 JSON 更有意义(例如,
SELECT * FROM OPENJSON(@json, '$.Chapter') WITH (Section NVARCHAR(100), Title NVARCHAR(100)),它适用于单例和数组情况)。
标签: json sql-server-2016