1) json_decode + json_last_error
2) RecursiveIteratorIterator + RecursiveArrayIterator
3) на предыдущем этапе выписываем ключи и потом проверяем, но если их несколько найдется?
Ну капитанская штука, реализацию сами пишите, ибо это уже задание, а не вопрос.