从具有JSON列表的JSON中提取键值?

时间:2019-06-04 18:13:11

标签: json awk sed apache-nifi

我需要从JSON文件textuploader.com/1dchq中提取id的{​​{1}},以便得到结果: "name":"ConsumeKafka"

由于限制,我无法使用任何第三方工具。如何使用sed / awk做到这一点?

3 个答案:

答案 0 :(得分:2)

$ awk -F '[":,]+' '$2=="id" {id=$3} $2=="name" && $3=="ConsumeKafka" {print id}' file
772658d2-8510-3834-856b-6cfd7e8871f6
772658d2-8510-3834-856b-6cfd7e8871f6
772658d2-8510-3834-856b-6cfd7e8871f6
  • -F '[":,]+'-使用任意数量的双引号,冒号或逗号作为字段分隔符。

  • $2=="id" {id=$3}-如果第二个字段正好是id,请保存下一个字段。

  • $2=="name" && $3=="ConsumeKafka" {print id}-根据字段2和3打印保存的ID。

如果只需要第一个比赛,请执行{print id; exit}

答案 1 :(得分:1)

您可以使用EvaluateJSONPath处理器将JSON值提取到流文件属性。使用JSONPath表达式$.processors[?(@.component.name=="ConsumeKafka")].component.idConsumeKafka id提取到流文件上的属性。

顺便说一句,我认为您使用的API响应过于通用且太大而无济于事。您可以通过进行更具体的API调用来限制JSON响应中返回的信息更具体。

答案 2 :(得分:0)

您可以从文本文件中执行以下操作:

awk '/"id"/ {print $1}' file
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"67e21117-891e-3019-8926-7571b3b0317f",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"a1c4b268-3a6f-3b4c-bf12-0ded10f5d767",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",
"id":"772658d2-8510-3834-856b-6cfd7e8871f6",