繁体   English   中英

将 jq 与大型 JSON 文件一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM