首页 > 解决方案 > 将简单 JSON 转换为 SQL SELECT 语句

问题描述

我有以下 JSON:

DECLARE @json NVARCHAR(MAX)

SET @json = N'[
  {"@odata.context":"http://www.example.com","value":[
  {"financialmovements_ID":1,"Data":"2020-02-10T00:00:00Z","ES":"E","Descri\u00e7\u00e3o":"FIV-005 3\u00baTRM19/20","Valor":455.9700,"ActGlbActDescr":"Reg. Financ. Pag.","ActGlbContr":"FIV005","ActGlbContrDescr":"Cond FIV-005"},
  {"financialmovements_ID":2,"Data":"2019-11-14T00:00:00Z","ES":"E","Descri\u00e7\u00e3o":"Pag. Cond FIV005","Valor":1958.6600,"ActGlbActDescr":"Reg. Financ. Pag.","ActGlbContr":"FIV005","ActGlbContrDescr":"Cond FIV-005"}]}
]'

我正在尝试转换为 SQL,如下所示:

SELECT *
FROM OPENJSON(@json, '$.value')
WITH (
    --financialmovements_ID INT '$.financialmovements_ID',
    Data DATETIME2 '$.Data',
    [E/S] NVARCHAR(max) '$.ES',
    DescTrs NVARCHAR(max) '$."Descri\u00e7\u00e3o"',
    Valor MONEY '$.Valor',
    ActGlbActDescr NVARCHAR(max) '$.ActGlbActDescr',
    ActGlbContr NVARCHAR(max) '$.ActGlbContr',
    ActGlbContrDescr NVARCHAR(max) '$.ActGlbContrDescr'
);

我得到的只是一个空的结果集(应该是 2 行时为 0 行),我做错了什么?

标签: sqljsonazuretsql

解决方案


您的 JSON 在整个内容周围都有方括号,这意味着它是一个数组(它只有一个元素),因此您的 OPENJSON 起点必须是$[0].value


推荐阅读