Aplanar objetos JSON en Python

JSON (Notación de objetos de JavaScript) es un formato de intercambio de datos que es texto legible por humanos y se utiliza para transmitir datos, especialmente entre aplicaciones web y servidores. Los archivos JSON serán como diccionarios anidados en Python. Para convertir un archivo de texto en JSON, hay un jsonmódulo en Python. Este módulo viene integrado con los módulos estándar de Python, por lo que no es necesario instalarlo externamente.

Un json plano no es nada, pero no hay anidamiento y solo están presentes los pares clave-valor.

Ejemplo:

JSON sin aplanar:
{‘usuario’:{‘Rachel’:{‘UserID’:1717171717,
‘Correo electrónico’: ‘rachel1999@gmail.com’,
‘amigos’: [‘John’, ‘Jeremy’, ‘Emily’]} }}

JSON simplificado:
{‘user_Rachel_friends_2’: ‘Emily’, ‘user_Rachel_friends_0’: ‘John’, ‘user_Rachel_UserID’: 1717171717, ‘user_Rachel_Email’: ‘rachel1999@gmail.com’, ‘user_Rachel_friends_1’: ‘Jeremy’}

Necesidad de aplanar JSON

Hay muchas razones para la necesidad de aplanar JSON, como una vista mejor y comprensible de que solo hay pares clave-valor presentes sin anidamiento. También permite que la seguridad y las restricciones específicas del contexto se implementen de una manera legible, pero más detallada.

Enfoque para aplanar JSON

Hay muchas formas de aplanar JSON. Hay una forma recursiva y otra mediante el uso de la json-flattenbiblioteca.

  • Enfoque recursivo:
  • Ahora podemos aplanar la array del diccionario mediante un enfoque recursivo que es bastante fácil de entender. El enfoque recursivo es un poco más lento que usar json-flattenla biblioteca.

    Ejemplo:

    # for a array value of a key
    unflat_json = {'user' :
                   {'Rachel':
                    {'UserID':1717171717,
                    'Email': 'rachel1999@gmail.com'
                    'friends': ['John', 'Jeremy', 'Emily']
                    }
                   }
                  }
      
    # Function for flattening 
    # json
    def flatten_json(y):
        out = {}
      
        def flatten(x, name =''):
              
            # If the Nested key-value 
            # pair is of dict type
            if type(x) is dict:
                  
                for a in x:
                    flatten(x[a], name + a + '_')
                      
            # If the Nested key-value
            # pair is of list type
            elif type(x) is list:
                  
                i = 0
                  
                for a in x:                
                    flatten(a, name + str(i) + '_')
                    i += 1
            else:
                out[name[:-1]] = x
      
        flatten(y)
        return out
      
    # Driver code
    print(flatten_json(unflat_json))

    Producción :

    {‘user_Rachel_friends_2’: ‘Emily’, ‘user_Rachel_friends_0’: ‘John’, ‘user_Rachel_UserID’: 1717171717, ‘user_Rachel_Email’: ‘rachel1999@gmail.com’, ‘user_Rachel_friends_1’: ‘Jeremy’}

  • Uso de la biblioteca flatten_json: la biblioteca json-flatten proporciona funciones para aplanar un objeto JSON en un solo par clave-valor y desacoplar ese diccionario de nuevo a un objeto JSON.

    Instalando biblioteca

    Para usar la biblioteca flatten_json, necesitamos instalar esta biblioteca. flatten_json se puede instalar ejecutando el siguiente comando en la terminal.

    pip install json-flatten

    Ejemplo:

    from flatten_json import flatten
      
    unflat_json = {'user' :
                   {'Rachel':
                    {'UserID':1717171717,
                    'Email': 'rachel1999@gmail.com'
                    'friends': ['John', 'Jeremy', 'Emily']
                    }
                   }
                  }
      
    flat_json = flatten(unflat_json)
      
    print(flat_json)

    Producción :

    {‘user_Rachel_UserID’: 1717171717, ‘user_Rachel_Email’: ‘rachel1999@gmail.com’, ‘user_Rachel_friends_0’: ‘John’, ‘user_Rachel_friends_1’: ‘Jeremy’, ‘user_Rachel_friends_2’: ‘Emily’}

Publicación traducida automáticamente

Artículo escrito por RahulSabharwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *