将jq用于大型JSON文件

zkure5ic  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(152)

我在Linux机器上使用了一个非常大的JSON文件,当我jq这个文件时,我得到了一个如下格式的输出,这是完美的:
{“ID:“12345“姓名:“joe“地址:“第一大街123号“电子邮件:“joe@example.com
我的目标是能够对特定字段执行grep,但返回所有相关字段,因此,如果对“123 firststreet”执行grep,我还将获得与这组数据在一起的ID、姓名和电子邮件。
到目前为止,我已经到了这里:
jq .我的文件. json| grep“第一大街123号”
有谁能帮我把这个查询弄对吗?我想继续使用这个JSON格式,继续使用Linux。
jq .我的文件. json| grep“第一大街123号”

s71maibg

s71maibg1#

您可以使用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"

如果您想从JSON对象中提取包含值为“123 first street”的“Address”字段的特定字段,您可以使用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"
fhity93d

fhity93d2#

这应该返回所有带有“field”的JSON对象。

jq '.[] | select(has("field"))'

相关问题