![](/img/trans.png)
[英]Using jq to stream, filter large json file and save output as csv
[英]Using jq with a large JSON file
我在我的 Linux 机器上有一个非常大的 JSON 文件,我正在使用它。 当我 jq 文件时,我得到了这种格式的输出,这是完美的:
{ “ID:”12345 “姓名:”joe “地址:”第一街123号 “Email:”joe@example.com
我的目标是能够对特定字段进行 grep,但返回所有相关字段。 因此,如果我对“123 first street”进行 grep,我也会得到该组数据的 ID、姓名和电子邮件。
到目前为止,我已经到了这里:
jq。 我的文件.json | grep “123 第一街”
谁能帮我解决这个问题? 我想继续使用这种 JSON 格式并留在 Linux 盒子里。
jq。 我的文件.json | grep “123 第一街”
您可以使用grep
的--raw-output
选项来打印包含搜索字符串的整行。 这将允许您查看包含值为“123 first street”的“Address”字段的整个 JSON 对象。 这是一个例子:
jq . Myfile.json | grep --raw-output "123 first street"
或者,您可以使用grep
的--color=never
选项来抑制颜色输出,这可以使输出更易于阅读。 这是一个例子:
jq . Myfile.json | grep --color=never "123 first street"
如果要从包含值为“123 first street”的“Address”字段的 JSON 对象中提取特定字段,可以使用jq
来过滤输出。 例如,以下命令将提取“ID”、“Name”和“Email”字段:
jq '. | select(.Address == "123 first street") | {ID, Name, Email}' Myfile.json
这将输出一个包含所选字段的 JSON 对象,如下所示:
{
"ID": 12345,
"Name": "joe",
"Email": "joe@example.com"
}
您还可以使用jq
提取特定字段并将输出格式化为字符串。 例如,以下命令将提取“ID”、“Name”和“Email”字段并将它们格式化为带有逗号分隔列表的字符串:
jq -r '. | select(.Address == "123 first street") | [.ID, .Name, .Email] | @csv' Myfile.json
这将输出如下字符串:
"12345","joe","joe@example.com"
这应该返回所有带有“字段”的 JSON 对象。
jq '.[] | select(has("field"))'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.