我想知道如何将这个由两个浮点数数组组成的JSON对象放入SQL数据库表:
{
"Latitudes": [
53.665084,
53.665084,
53.665184,
53.665284
],
"Longitudes":[
17.342853,
17.342953,
17.343053,
17.343153
]
}
表有3列:CoordID,纬度和经度(CoordID是自动递增的)。 我想将每对这些表([0],[0] / [1] [1]等)放在表中一行。 因此使用该对象将是4行。
这是我无法预期的代码-它只是将空值代替“经度”和“纬度”列,并且仅创建一个ROW ...(而不是4行):
declare @json NVARCHAR(MAX);
SET @json=
'{
"Latitudes": [
53.665084,
53.665084,
53.665184,
53.665284
],
"Longitudes":[
17.342853,
17.342953,
17.343053,
17.343153
]
}'
insert into dbo.Coords(
[Latitude],[Longitude])
select Latitude, Longitude from OPENJSON(@json)
WITH(
Latitude FLOAT '$."Latitudes"',
Longitude FLOAT '$."Longitudes"')
P.S OPENJSON()函数从SQL Server 2016版或Azure SQL数据库开始工作。以防万一有人试图在SSMS 2014中运行它,即;-)
答案 0 :(得分:2)
使用JSON_QUERY
解析数组:
declare @json NVARCHAR(MAX) =
'{
"Latitudes": [
53.665084,
53.665084,
53.665184,
53.665284
],
"Longitudes":[
17.342853,
17.342953,
17.343053,
17.343153
]
}';
WITH cte1 AS (
select A.value Latitude, [key] AS rn from OPENJSON(JSON_QUERY(@json,'$.Latitudes')) A
), cte2 AS (
select A.value Longitude,[key] AS rn from OPENJSON(JSON_QUERY(@json,'$.Longitudes')) A
)
--insert into dbo.Coords([Latitude],[Longitude])
SELECT Latitude, Longitude
FROM cte1
JOIN cte2
ON cte1.rn = cte2.rn;
答案 1 :(得分:2)
您只能使用OPENJSON()
来检索数据。
这里的重要部分是事实,当OPENJSON()
解析JSON
数组时,
函数returns将此数组中元素的索引作为键,因此可以将结果联接到这些索引上。
T-SQL:
DECLARE @json NVARCHAR(MAX);
SET @json=
'{
"Latitudes": [
53.665084,
53.665084,
53.665184,
53.665284
],
"Longitudes": [
17.342853,
17.342953,
17.343053,
17.343153
]
}'
--INSERT INTO dbo.Coords([Latitude], [Longitude])
SELECT j1.[value], j2.[value]
FROM
OPENJSON(@json, '$.Latitudes') j1,
OPENJSON(@json, '$.Longitudes') j2
WHERE j1.[key] = j2.[key]
输出(来自SELECT
语句):
---------------------
value value
---------------------
53.665084 17.342853
53.665084 17.342953
53.665184 17.343053
53.665284 17.343153