parse JSON sin conocer el valor clave [cerrado]

Sé cómo analizar un JSON conociendo el valor clave, pero ahora me gustaría obtener los valores clave de un JSON que no es mío, por lo que puedo conocer los nombres de las claves, por ejemplo, tengo este JSON

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "[email protected]",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
  {
    "id": 2,
    "name": "Ervin Howell",
    "username": "Antonette",
    "email": "[email protected]",
    "address": {
      "street": "Victor Plains",
      "suite": "Suite 879",
      "city": "Wisokyburgh",
      "zipcode": "90566-7771",
      "geo": {
        "lat": "-43.9509",
        "lng": "-34.4618"
      }
    },
    "phone": "010-692-6593 x09125",
    "website": "anastasia.net",
    "company": {
      "name": "Deckow-Crist",
      "catchPhrase": "Proactive didactic contingency",
      "bs": "synergize scalable supply-chains"
    }
  },
  ...
 ]

Así que a partir de ahora tengo esto:

with open('users.json') as f:
    data = json.load(f)

Donde puedo ver todo el JSON cargado si imprimodata, entonces mi pregunta es, ¿cómo imprimo todas las claves y objetos anidados sin saber el nombre?

Mi objetivo es tener algo como nombre de identificación, nombre de usuario, dirección de correo electrónico que contiene calle, suite, ciudad, código postal, geo que contiene lat, long, etc.

Respuestas a la pregunta(2)

Su respuesta a la pregunta