首页 > 解决方案 > SQL Server / OPENJSON / 认知服务 / LUIS

问题描述

我有这个 JSON:

{
    "query": "meu problema não foi resolvido",
    "prediction": {
        "topIntent": "Problem_not_resolved",
        "intents": {
            "Problem_not_resolved": {
                "score": 0.89767915
            },
            "Product_Quality": {
                "score": 0.09048716
            },
            "None": {
                "score": 0.00640945463
            }
        },
        "entities": {}
    }
}

(项目'Problem_not_resolved'和是未知的'Product_Quality''None'每次通话时都可以在此处列出新标签)。

在 SQL Server 中,我运行以下命令:

SELECT *
FROM OPENJSON (@V_JSON, '$.prediction.intents')

选择结果:

在此处输入图像描述

如何创建一个选择命令来捕获每个项目的“分数”字段的值?

标签: jsonsql-server

解决方案


如果我理解正确,您需要一个OPENJSON()带有显式模式(子句)的额外调用WITH来解析嵌套的 JSON:

JSON:

DECLARE @json nvarchar(max) = N'{
    "query": "meu problema não foi resolvido",
    "prediction": {
        "topIntent": "Problem_not_resolved",
        "intents": {
            "Problem_not_resolved": {
                "score": 0.89767915
            },
            "Product_Quality": {
                "score": 0.09048716
            },
            "None": {
                "score": 0.00640945463
            }
        },
        "entities": {}
    }
}'

陈述:

SELECT j1.[key], j2.score
FROM OPENJSON(@json, '$.prediction.intents') j1
CROSS APPLY OPENJSON(j1.[value]) WITH (score float '$.score') j2

结果:

----------------------------------
key                     score
----------------------------------
Problem_not_resolved    0.89767915
Product_Quality         0.09048716
None                    0.00640945463

推荐阅读