使用 ORACLE JSON_TABLE 解析复杂的 JSON GET 调用

问题描述 投票:0回答:1

我有以下 GET 调用响应。

{
  "PrepaymentIncludedonInvoiceFlag": null,
  "ReferenceKeyTwo": null,
  "ProductTable": null,
  "links": [
    {
      "rel": "self",
      "href": "domain.com/fscmRestApi/resources/11.13.18.05/invoices/300000165112384/child/invoiceLines/00020000000EACED00057708000110D93B462A400000000AACED0005770400000001",
      "name": "invoiceLines",
      "kind": "item",
      "properties": {
        "changeIndicator": "ACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000001770400000001737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000278"
      }
    }
  ]
}

在上面的 GET 响应中,我只需要解析下面显示的突出显示的字符串并将其存储到 CLOB 中。

href":"fa-esgu-dev5-domain.com/fscmRestApi/resources/11.13.18.05/invoices/300000165112384/child/invoiceLines/00020000000EACED00057708000110D93B462A400000000 AACED0005770400000001

如何使用 Oracle JSON_TABLE 或任何其他以 Oracle 为中心的方法来实现此目的?

请指教。

sql json oracle plsql oracle-apex
1个回答
0
投票

为此,您不需要 JSON_TABLE,而是需要 JSON_VALUE。根据文档

SQL/JSON 函数 JSON_VALUE 在 JSON 数据中查找指定的标量 JSON 值并将其作为 SQL 值返回。

一旦你知道了,它实际上很简单:

选择

JSON_VALUE(json_data,'$.links[0].href')
,其中 (1)
$
是 JSON 上下文,(2)
links[0]
是“links”数组的第一个元素,(3)
href
是 href 属性的标量值选定的链接元素。

with json_doc AS 
(SELECT
'{
  "PrepaymentIncludedonInvoiceFlag": null,
  "ReferenceKeyTwo": null,
  "ProductTable": null,
  "links": [
    {
      "rel": "self",
      "href": "domain.com/fscmRestApi/resources/11.13.18.05/invoices/300000165112384/child/invoiceLines/00020000000EACED00057708000110D93B462A400000000AACED0005770400000001",
      "name": "invoiceLines",
      "kind": "item",
      "properties": {
        "changeIndicator": "ACED0005737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000001770400000001737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000278"
      }
    }
  ]
}' AS json_data FROM dual
)
SELECT 
  JSON_VALUE(json_data,'$.links[0].href')
from json_doc WHERE json_data IS JSON;

JSON_VALUE(JSON_DATA,'$.LINKS[0].HREF')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
----------------------------------------------------------------------------
domain.com/fscmRestApi/resources/11.13.18.05/invoices/300000165112384/child/invoiceLines/00020000000EACED00057708000110D93B462A400000000AACED0005770400000001

© www.soinside.com 2019 - 2024. All rights reserved.