Один и тот же ключ, разные значения: вложенные дикты диктов - PullRequest
0 голосов
/ 01 июня 2019

Заимствуя MWE из этого вопроса , у меня есть набор вложенных диктов:

{
  "type": "A"
    "a": "aaa",
    "payload": {"another":{"dict":"value", "login":"user1"}},
    "actor": {"dict":"value", "login":"user2"}
}
{
  "type": "B"
    "a": "aaa",
    "payload": {"another":{"dict":"value", "login":"user3"}},
    "actor": {"dict":"value", "login":"user4"}
  }
}
{
  "type": "A"
    "a": "aaa",
    "b": "bbb",
    "payload": {"another":{"dict":"value", "login":"user5"}},
    "actor": {"dict":"value", "login":"user6"}
  }
}
{
  "type": "A"
    "a": "aaa",
    "b": "bbb",
    "payload": {"login":"user5"},
    "actor": {"login":"user6"}
  }
}

Для словарей, имеющих "type":"A", я хочу получить имя пользователя из payload dict и имя пользователя из actor dict. Одно и то же имя пользователя может появляться несколько раз. Я хотел бы сохранить текстовый файл со списком actor (ID1) и списком payload (ID2) следующим образом:

ID1    ID2
user2  user1
user6  user5
user6  user5

Прямо сейчас у меня есть начало:

zgrep "A" | zgrep -o 'login":"[^"]*"' | zgrep -o 'payload":"[^"]*" > usernames_list.txt

Но, конечно, это не сработает, потому что мне нужно найти логин внутри dict полезной нагрузки и логин внутри dict актера для каждого dict типа A.

Есть мысли?

1 Ответ

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

Я предполагаю, что у вас есть словари payload и actor для всех записей type A.

  1. Разобрать имя пользователя из записей payload и перенаправить их в файл с именем payload.txt
  2. Разобрать имя пользователя из actor записей и перенаправить их на другой файл с именем actor.txt
  3. Используйте команду paste, чтобы объединить записи и вывести их так, как вы хотите
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...