3

JSON 存储在表中的“DataJson”列中

[{
    "KickOffDate": "1-Jan-2019",
    "TeamSize": "11",
    "ClientEngineer": "Sagar",
    "WaitingPeriod": "16.5"
}]

询问

SELECT JSON_VALUE(DataJson,'$.KickOffDate') AS KickOffDate
     , JSON_VALUE(DataJson,'$.ClientEngineer') AS ClientEngineer
FROM [ABC].[Deliver]

结果

KickOffDate   ClientEngineer
NULL          NULL

结果应该是:

KickOffDate   ClientEngineer
1-Jan-2019    Sagar
4

2 回答 2

8

您的 sql 查询错误。
您必须像下面这样更正查询。

 SELECT JSON_VALUE(DataJson,'$[0].KickOffDate') AS KickOffDate ,JSON_VALUE(DataJson,'$[0].ClientEngineer') AS ClientEngineer FROM [ABC].[Deliver]

表中存储的数据不是 JSON 对象,而是 JSON 数组。
所以为了获取 JSON Object 的每个值,需要在 JSON Array 中设置 JSON Object 的索引。
否则,您可以将数据存储为 JSON 对象,然后您的查询就可以正常工作。

于 2019-01-07T14:28:46.743 回答
2

至少从 SQL Server 的 JSON API 的角度来看,您的 JSON 似乎格式不正确。根据我的阅读,如果您的 JSON 数据由顶级 JSON 数组组成,那么该数组需要有一个键名,并且整个内容也应该包含在{ ... }.

以下设置已经过测试并且有效:

WITH yourTable AS (
    SELECT '{ "data" : [{"KickOffDate": "1-Jan-2019", "TeamSize": "11", "ClientEngineer": "Sagar", "WaitingPeriod": "16.5"}] }' AS DataJson
)

SELECT
    JSON_VALUE(DataJson, '$.data[0].KickOffDate') AS KickOffDate,
    JSON_VALUE(DataJson, '$.data[0].ClientEngineer') AS ClientEngineer
FROM yourTable;

在此处输入图像描述

演示

这是我使用的输入 JSON 的样子:

{
    "data" : [
        {
            "KickOffDate": "1-Jan-2019",
            "TeamSize": "11",
            "ClientEngineer": "Sagar",
            "WaitingPeriod": "16.5"
        }
    ]
}
于 2019-01-07T14:18:11.010 回答