作者:三砖先生 | 来源:互联网 | 2023-01-16 19:25
如果我有一些示例数据,如何将其放入SQLite(最好是全自动的)中?
{"uri":"/","user_agent":"example1"}
{"uri":"/foobar","user_agent":"example1"}
{"uri":"/","user_agent":"example2"}
{"uri":"/foobar","user_agent":"example3"}
benaryorg..
9
我发现最简单的方法是使用jq和CSV作为中间格式。
编辑:如所指出的(感谢@Leo),原始问题确实显示了以换行符分隔的JSON对象,每个对象都各自符合rfc4627,但并非全部以该格式结合在一起。
通过使用预处理文件,jq可以处理对象的单个JSON数组,其处理方式几乎相同jq '.[]' preprocessed.json
。如果您碰巧正在处理JSON文本序列(rfc7464),幸运的是jq也支持该--seq
参数。
获取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'
现在,我们使用整个输入并使用来解构关联数组(map).[]
,然后将其放回简单数组中[…]
。这基本上将我们的字典转换为键数组。发送给@csv
格式化程序后,我们再次获得一些CSV。
综上所述,我们得到一个单线形式:
% (head -1 data.json | jq -r 'keys | @csv' && jq -r '[.[]] | @csv' data.csv
如果您需要即时转换数据,即没有文件,请尝试以下操作:
% cat data.json | (read -r first && jq -r '(keys | @csv),( [.[]] | @csv)' <<<"${first}" && jq -r '[.[]] | @csv')
加载到SQLite
打开一个SQLite数据库:
sqlite3 somedb.sqlite
现在,在交互式外壳程序中执行以下操作(假设您将CSV写到data.csv并希望在名为的表中进行my_table
):
.mode csv
.import data.csv my_table
现在,关闭外壳,然后再次将其打开以提供清洁的环境。您现在可以轻松地SELECT
从数据库中执行任何操作。
放在一起
在那里有一个腹水记录:
1> benaryorg..:
我发现最简单的方法是使用jq和CSV作为中间格式。
编辑:如所指出的(感谢@Leo),原始问题确实显示了以换行符分隔的JSON对象,每个对象都各自符合rfc4627,但并非全部以该格式结合在一起。
通过使用预处理文件,jq可以处理对象的单个JSON数组,其处理方式几乎相同jq '.[]' preprocessed.json
。如果您碰巧正在处理JSON文本序列(rfc7464),幸运的是jq也支持该--seq
参数。
获取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'
现在,我们使用整个输入并使用来解构关联数组(map).[]
,然后将其放回简单数组中[…]
。这基本上将我们的字典转换为键数组。发送给@csv
格式化程序后,我们再次获得一些CSV。
综上所述,我们得到一个单线形式:
% (head -1 data.json | jq -r 'keys | @csv' && jq -r '[.[]] | @csv' data.csv
如果您需要即时转换数据,即没有文件,请尝试以下操作:
% cat data.json | (read -r first && jq -r '(keys | @csv),( [.[]] | @csv)' <<<"${first}" && jq -r '[.[]] | @csv')
加载到SQLite
打开一个SQLite数据库:
sqlite3 somedb.sqlite
现在,在交互式外壳程序中执行以下操作(假设您将CSV写到data.csv并希望在名为的表中进行my_table
):
.mode csv
.import data.csv my_table
现在,关闭外壳,然后再次将其打开以提供清洁的环境。您现在可以轻松地SELECT
从数据库中执行任何操作。
放在一起
在那里有一个腹水记录: