【问题标题】:SQL Server Parsing a JSON Column with Irregular ValuesSQL Server 解析具有不规则值的 JSON 列
【发布时间】:2022-12-11 00:20:28
【问题描述】:

我有 SQL Server 13 安装,我正在尝试用 JSON 数据解析列。 RequestData 列中的数据格式如下:

[{"Name":"SourceSystem","Value":"SSValue"},{"Name":"SourceSystemId","Value":"XYZ"}]
[{"Name":"SourceSystemId","Value":"SSID"},{"Name":"SourceSystem","Value":"SSVALUE2"}]

我需要获取的是每一行中 JSON 对象的 SourceSystem 元素的值。这是我的 Select 语句:

SELECT TOP 2 JSON_VALUE(RequestData, '$[0].Value') AS SourceSystem FROM RequestDetail

但是,由于列数据中 JSON 元素的顺序,为 SourceSystem 列返回的值不正确。

SS 值、SSID

请注意,我需要能够解析 JSON 元素,以便 SourceSystem 列具有正确的值,即 SSValue 和 SSValue2。

我还使用一些在线示例尝试了 JSON_Query,但到目前为止还没有成功。

谢谢!

【问题讨论】:

    标签: sql json sql-server


    【解决方案1】:

    大概你在这里需要OPENJSON,而不是JSON_VALUE

    SELECT *
    FROM (VALUES(N'[{"Name":"SourceSystem","Value":"SSValue"},{"Name":"SourceSystemId","Value":"XYZ"}]'),
                (N'[{"Name":"SourceSystemId","Value":"SSID"},{"Name":"SourceSystem","Value":"SSVALUE2"}]'))V(YourJSON)
         CROSS APPLY OPENJSON(V.YourJSON)
                     WITH (Value nvarchar(20));
    

    【讨论】:

    • 谢谢你。所以我想我应该用我的列名替换硬编码的 JSON 并试一试......
    • 是的,你会引用你的表,而不是 VALUES 表构造,@IrfanClemson。
    • 我想如果可以的话,请用您的答案中的表名替换?我正在尝试。谢谢。
    • 我将需要解析多个 JSON 元素,因此 Select 语句中的“AS”很重要。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多