如果我有一些示例數據,我該如何將它放入SQLite(最好是完全自動化的)?如何將JSON文件轉換爲SQLite數據庫
{"uri":"/","user_agent":"example1"}
{"uri":"/foobar","user_agent":"example1"}
{"uri":"/","user_agent":"example2"}
{"uri":"/foobar","user_agent":"example3"}
如果我有一些示例數據,我該如何將它放入SQLite(最好是完全自動化的)?如何將JSON文件轉換爲SQLite數據庫
{"uri":"/","user_agent":"example1"}
{"uri":"/foobar","user_agent":"example1"}
{"uri":"/","user_agent":"example2"}
{"uri":"/foobar","user_agent":"example3"}
我發現這樣做最簡單的方法是使用jq和CSV作爲中介格式。
首先將您的數據寫入文件。 我會在這裏假設data.json。
然後構建使用jq
頭:
% head -1 data.json | jq -r 'keys | @csv'
"uri","user_agent"
的head -1
是因爲我們只想要一條線。 jq
的-r
使輸出成爲一個純字符串,而不是包裝CSV的JSON-String。 然後,我們調用內部函數keys
以將輸入的鍵作爲數組獲取。 我們發送給@csv
格式化程序,它輸出帶有CSV格式標題的單個字符串。
然後我們需要構造數據。
% jq -r '[.[]] | @csv' < data.json
"/","example1"
"/foobar","example1"
"/","example2"
"/foobar","example3"
我們現在把整個輸入和解構使用.[]
關聯數組(圖),然後把它放回一個簡單的數組[…]
。 這基本上將我們的字典轉換爲一個鍵數組。 發送到@csv
格式化程序,我們再次獲取一些CSV。
全部放在一起,我們的形式得到一個單一的一行代碼:
% (head -1 data.json | jq -r 'keys | @csv' && jq -r '[.[]] | @csv' < data.json) > data.csv
如果您需要將數據轉換上的蒼蠅,即沒有一個文件,試試這個:
% cat data.json | (read -r first && jq -r '(keys | @csv),([.[]] | @csv)' <<<"${first}" && jq -r '[.[]] | @csv')
打開一個SQLite數據庫:
sqlite3 somedb.sqlite
現在在交互shell執行以下操作(假設你寫的CSV到data.csv並希望它在一個名爲my_table
表):
.mode csv
.import data.csv my_table
現在關閉外殼,然後再次打開它了乾淨的環境。 您現在可以輕鬆地從數據庫中SELECT
中做任何你想做的事情。同時
自問自答:
全部放在一起
有asciinema記錄在那裏? – lad2025
回答你自己的問題沒有錯,只要它對別人有價值。這是一個寫得很好的答案。但是這其中只有兩個問題,通過回答的兩個部分來表現非常明顯,因此應該單獨發佈。但後來可能有重複... – glennsl
@glennsl我對如何完成任務有一個模糊的想法,但是先查找它並沒有看到任何結果,所以我解決了它,並認爲這將是很好的填補SO知識庫中的空白空間。 – benaryorg