Azure表单识别对Microsoft SQL表的JSON响应
我试图将Azure Form recognition的输出映射到一个SQL表,但很难分解JSON输出,下面是我试图执行的SQL语句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,
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'