如何解析SQL中嵌套的JSON对象?

weylhg0b  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(248)

我有一个JSON字符串,由API返回,看起来像这样:

{
  "data": {
    "transactions": {
      "edges": [
        {
          "node": {
            "text": "debet",
            "invoiceAmount": "1.0000"
          }
        },
        {
          "node": {
            "text": "kredit",
            "invoiceAmount": "-1.0000"
          }
        }
      ]
    }
  }
}

这是一个有效的JSON,但是我能够在sql中解析的唯一方法是首先操作字符串。

[
  {
    "node": {
      "text": "debet",
      "invoiceAmount": "1.0000"
    }
  },
  {
    "node": {
      "text": "kredit",
      "invoiceAmount": "-1.0000"
    }
  }
]

例如下面的例子。我如何在不操纵字符串的情况下实现这一点?

DECLARE @json NVARCHAR(MAX);
SET @json = N'[{"node":{"text":"debet","invoiceAmount":"1.0000"}},{"node":{"text":"kredit","invoiceAmount":"-1.0000"}}]';

SELECT *
FROM OPENJSON(@json)  
  WITH (
    text NVARCHAR(50) '$.node.text',
    invoiceAmount MONEY '$.node.surname'
  )

我尝试了$.数据.事务.边缘.节点.文本。SQL返回NULL

0sgqnhkj

0sgqnhkj1#

您可以使用

SELECT *
FROM OPENJSON(JSON_QUERY(@json, '$.data.transactions.edges'))  
  WITH (
    text VARCHAR(100) '$.node.text',    
    invoiceAmount DECIMAL(10,4) '$.node.invoiceAmount'
  )

从原始字符串中获取所需的值。
DB Fiddle
JSON_QUERY首先提取数组,然后使用OPENJSON扩展该数组。

相关问题