如何使用 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
我是 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