如何使用 Oracle 解析没有 element/property 名称的 JSON 数组

How to parse JSON array that has no element/property names using Oracle

我是 JSON 的新手,正在尝试解析通过关注 URL

返回的数据

https://api.binance.com/api/v3/klines?symbol=LTCBTC&interval=5m

数据是public如果你想看到确切的输出

我在 Oracle 18c 数据库中尝试使用 json_table,但我不确定如何格式化查询或引用列,因为 JSON 没有名称,只有值。

如果我按如下方式粘贴数组中的一条记录,那么我可以获得包含所有值的列,但我需要解析整个数组并将输出输出到 table

SELECT *
FROM json_table( '[1617210000000,"0.00325500","0.00326600","0.00325400","0.00326600","780.81000000",1617210299999,"2.54374363",210,"569.58000000","1.85545803","0"]' , '$[*]'
                COLUMNS (value PATH '$' ))

我已经搜索 google 好几天了,但没有找到我正在尝试做的事情的示例,所有示例都使用 JSON 和 name:value 对。

提前致谢。

原始数据是一个数组数组,因此您可以使用 $[*] 获取各个数组,然后使用编号位置从每个数组中获取值:

SELECT *
FROM json_table(
  '[[...], [...], ...]', -- use actual data, as CLOB?
  '$[*]'
  COLUMNS (
    open_time PATH '$[0]',
    open PATH '$[1]',
    high PATH '$[2]',
    low PATH '$[3]',
    close PATH '$[4]',
    volume PATH '$[5]',
    close_time PATH '$[6]',
    quote_av PATH '$[7]',
    number_of_trades PATH '$[8]',
    taker_buy_base_av PATH '$[9]',
    taker_buy_quote_av PATH '$[10]',
    ignore PATH '$[11]'
  )
)

我从 the API documentation 中获取了列名。不确定为什么有些是字符串,大概是一个精确的东西;但是您显然可以指定数据类型。 (如果您想这样做,有很多将纪元时间戳转换为 Oracle dates/timestamps 的示例。)

db<>fiddle 有四个条目,还有一个附加的序数列,您可能不会 want/need.

IDX | OPEN_TIME     | OPEN       | HIGH       | LOW        | CLOSE      | VOLUME       | CLOSE_TIME    | QUOTE_AV   | NUMBER_OF_TRADES | TAKER_BUY_BASE_AV | TAKER_BUY_QUOTE_AV | IGNORE
--: | :------------ | :--------- | :--------- | :--------- | :--------- | :----------- | :------------ | :--------- | :--------------- | :---------------- | :----------------- | :-----
  1 | 1617423900000 | 0.00356800 | 0.00357100 | 0.00356400 | 0.00356800 | 358.71000000 | 1617424199999 | 1.27964866 | 90               | 313.96000000      | 1.12008826         | 0     
  2 | 1617424200000 | 0.00356800 | 0.00357000 | 0.00356600 | 0.00356800 | 349.47000000 | 1617424499999 | 1.24704741 | 105              | 283.05000000      | 1.01005077         | 0     
  3 | 1617424500000 | 0.00357000 | 0.00357900 | 0.00357000 | 0.00357400 | 412.32000000 | 1617424799999 | 1.47359944 | 127              | 53.73000000       | 0.19203676         | 0     
  4 | 1617424800000 | 0.00357500 | 0.00357500 | 0.00356500 | 0.00356600 | 910.58000000 | 1617425099999 | 3.25045272 | 198              | 463.30000000      | 1.65400945         | 0