sql - Azure 表单识别对 Microsoft SQL 表的 JSON 响应

标签 sql json azure

我正在尝试将 Azure 表单识别的输出映射到 SQL 表,但很难分解 JSON 输出,这是我尝试执行的 SQL 语句

   declare @RJSON NVARCHAR(MAX) = N'{
  "status": "Succeeded",
  "understandingResults": [
    {
      "pages": [
        1
      ],
      "fields": {
        "Subtotal": null,
        "Total": {
          "valueType": "numberValue",
          "value": 52.54,
          "text": "$52,54",
          "elements": [
            {
              "$ref": "#/recognitionResults/0/lines/82/words/0"
            }
          ]
        },
        "Tax": null,
        "MerchantAddress": null,
        "MerchantName": {
          "valueType": "stringValue",
          "value": "OP BRITISH CHICKEN CP BRITISH CHICKEN",
          "text": "OP BRITISH CHICKEN CP BRITISH CHICKEN",
          "elements": [
            {
              "$ref": "#/recognitionResults/0/lines/27/words/0"
            },
            {
              "$ref": "#/recognitionResults/0/lines/27/words/1"
            },
            {
              "$ref": "#/recognitionResults/0/lines/27/words/2"
            },
            {
              "$ref": "#/recognitionResults/0/lines/29/words/0"
            },
            {
              "$ref": "#/recognitionResults/0/lines/29/words/1"
            },
            {
              "$ref": "#/recognitionResults/0/lines/29/words/2"
            }
          ]
        },
        "MerchantPhoneNumber": null,
        "TransactionDate": null,
        "TransactionTime": null
      }
    }
    ]
    }'

    SELECT 
    OJC.value
    ,JSON_VALUE(OJC.[value],'$.text') as text
    FROM OPENJSON(@RJSON) OJC 
    CROSS APPLY OPENJSON(JSON_QUERY(OJC.[value]),'$.fields.Total') OCV
    where 
    OJC.[value]<>'Succeeded'

我尝试过各种组合,但没有任何乐趣。 看起来 JSON 的格式化方式无法遍历嵌套数组。

最佳答案

终于解决了:)

SELECT 
TotalValue=c.[value]
,Merchant=d.[value]
,ExpenseDate= try_convert(date, e.[text], 103)
FROM OPENJSON(@RJSON) OJC 
    CROSS APPLY OPENJSON(OJC.[value])
    with (fields  nvarchar(max) as JSON) a
        CROSS APPLY OPENJSON(a.[fields]) 
        with (Total nvarchar(max) as json, MerchantName nvarchar(max) as json, TransactionDate nvarchar(max) as json) b
            CROSS APPLY OPENJSON (b.Total)
            with ([value] float) c
                CROSS APPLY OPENJSON (b.MerchantName)
                with ([value] nvarchar(max)) d
                    CROSS APPLY OPENJSON (b.TransactionDate)
                    with ([text] nvarchar(max)) e
where 
    OJC.[key]='understandingResults'

关于sql - Azure 表单识别对 Microsoft SQL 表的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59112242/

相关文章:

php - Zend Framework DB Complex Where 或条件

sql - 获取有关表值函数的信息

android - instanceof JSONObject 不检测 JSONObject

amazon-web-services - Terraform main.tf 为不同的名称约定

javascript - Azure Durable Function (Node.JS) 错误 "Microsoft.Azure.WebJobs.Host: Can' t 将参数 'data' 绑定(bind)到类型 'System.String' 。”

powershell - 通过 Powershell 检索 Azure 服务总线共享访问连接字符串

sql - Netezza 中的有界累积和

javax.json 产生难以理解的 json

java - 如何使用 Hibernate/Spring boot 将 JSON 文件作为 JSON 数据类型存储在 mysql 中?

sql 调用自定义函数 - tsql