Saya baru mengenal JSON dan mencoba mengurai data yang dikembalikan dengan mengikuti URL

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

Data bersifat publik jika Anda ingin melihat hasil yang tepat

Saya berada di database Oracle 18c yang mencoba menggunakan json_table tetapi saya tidak yakin bagaimana memformat kueri atau mereferensikan kolom karena JSON tidak memiliki nama, hanya nilai.

Jika saya hanya menempelkan satu catatan dari array sebagai berikut maka saya bisa mendapatkan kolom dengan semua nilai, tetapi saya perlu mengurai seluruh array dan mendapatkan output ke dalam tabel

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 '$' ))

Saya telah mencari di google selama berhari-hari dan tidak menemukan contoh dari apa yang saya coba lakukan, semua contoh menggunakan JSON dengan pasangan nama:nilai.

Terima kasih sebelumnya.

0
Sandy Hunt 4 April 2021, 22:39

2 jawaban

Jawaban Terbaik

Data mentah adalah larik larik, jadi Anda bisa menggunakan $[*] untuk mendapatkan masing-masing larik, lalu diberi nomor posisi untuk mendapatkan nilai dari masing-masing larik tersebut:

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]'
  )
)

Saya telah mengambil nama kolom dari dokumentasi API. Tidak yakin mengapa beberapa adalah string, mungkin hal yang presisi; tetapi Anda dapat dengan jelas menentukan tipe data. (Dan ada banyak contoh stempel waktu Epoch yang dikonversi ke tanggal/stempel waktu Oracle jika Anda ingin melakukannya.)

db<>biola dengan empat entri, dan kolom tambahan untuk ordinalitas, yang mungkin tidak Anda inginkan/ butuhkan.

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     

2
Alex Poole 4 April 2021, 22:44

Anda harus menulis pengurai posisi. Saya menulis satu untuk Anda menggunakan Python 3. Jika Anda ingin membuatnya lebih baik, Anda bisa menggunakan modul CSV.

#!/usr/local/bin/python3
import json

if __name__ == "__main__":
    with open('klines.json') as inputfile:
        myDict = json.load(inputfile)
        for entry in myDict:
            for item in entry:
                print(item, end =",")
            print() # newline at the end of the line
        print() # newline at the end of the file

Data dapat disusun secara posisi, atau dengan kunci. Anda terbiasa berurusan dengan data kunci, yang saya (dan semua orang di internet) lebih suka. Ada baiknya bisa menangani data posisional untuk kasus seperti ini. Saya MENANGGUNG data di posisi yang sama berarti hal yang sama, yang mungkin valid karena Anda mengatakan ini berasal dari Oracle.

Ini keluaran sebenarnya. Saya tidak yakin apakah CSV adalah yang Anda butuhkan, karena Anda mengatakan "tabel" tetapi Anda mungkin dapat membuka ini, mencari cara untuk memodifikasi program di atas, dan membuat beberapa kemajuan.

0
Brian Stinar 4 April 2021, 20:01