如果我有一些示例数据,我该如何将它放入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