Извлечь ключ-значение из JSON, имеющего список JSON? - PullRequest
0 голосов
/ 04 июня 2019

Мне нужно извлечь id из "name":"ConsumeKafka" из файла JSON textuploader.com/1dchq, чтобы он дал мне результат: "id":"772658d2-8510-3834-856b-6cfd7e8871f6".

Я не могу использовать сторонние инструменты из-за ограничений.Как я могу сделать это с помощью sed / awk?

Ответы [ 3 ]

2 голосов
/ 04 июня 2019
$ 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.

Если вам нужен только первый матч, сделайте {print id; exit}

1 голос
/ 04 июня 2019

Вы можете использовать процессор EvaluateJSONPath для извлечения значений JSON в атрибуты потокового файла. Используйте выражение JSONPath $.processors[?(@.component.name=="ConsumeKafka")].component.id для извлечения ConsumeKafka id в атрибут в файле потока.

Кроме того, я думаю, что ответ API, который вы используете, слишком общий и большой, чтобы быть полезным. Вы можете ограничить информацию, возвращаемую в ответе JSON, чтобы она была более конкретной, сделав более конкретный вызов API

0 голосов
/ 04 июня 2019

Из текстового файла вы можете сделать:

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",
...