Как указал @ l0b0, эту проблему лучше всего решить с помощью инструмента, поддерживающего JSON, такого как jq . Здесь, вот, решение JQ.
Следует отметить, однако, что выборочный ввод странно нерегулярен, поэтому требования не так ясны. Если бы JSON был более регулярным, решение jq было бы проще.
В любом случае следующий фильтр jq выдаст результат, как описано:
.results[]
| ..
| objects
| select(has("general-info"))
| [(.["general-info"]|.["full-name"]), (.. | .id? // empty)]
| join("|")
Облегчение
Вторая последняя строка выше может быть упрощена до:
[."general-info"."full-name", (.. | .id? // empty)]