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

Azure表单识别对Microsoft SQL表的JSON响应,sql,json,azure,Sql,Json,Azure,我试图将Azure Form recognition的输出映射到一个SQL表,但很难分解JSON输出,下面是我试图执行的SQL语句 declare @RJSON NVARCHAR(MAX) = N'{ "status": "Succeeded", "understandingResults": [ { "pages": [ 1 ], "fields": { "Subtotal": null,

我试图将Azure Form recognition的输出映射到一个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'
设法解决了这个问题:

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'