es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo crear un array de objetos JSON con múltiples valores?

Intenté usar un “append” para crear un nuevo conjunto de datos. Sin embargo, la función creada devuelve un conjunto de datos con varios objetos y no un objeto con varios valores.

Código->

def parse_json(self, data):
file = ‘vault.json’
json = {}
for obj in data:
if ‘EMAIL’ in obj[0]:
json.setdefault(‘EMAIL’, {}).update({obj[0]: obj[1]})
if ‘TEST’ in obj[0]:
json.setdefault(‘TEST’, {}).update({obj[0]: obj[1]})
else:
json.setdefault(‘VAULT’, {}).update({obj[0]: obj[1]})
with open(file, ‘w’) as f:
dump(json, f, indent=2, separators=(‘,’, ‘:’))

Respuesta ->

{
“EMAIL”:[
{“EMAIL_CC”:””,”EMAIL_CCO”:””},
{“EMAIL_DESTINY”:”teste@gmail.com”}
]
}

Respuesta deseada ->

{
“EMAIL”:{
“EMAIL_CC”:””,
“EMAIL_CCO”:””,
“EMAIL_DESTINY”:”teste@gmail.com”
}
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear un nuevo objeto con varios valores en lugar de un array con varios objetos, necesitas cambiar el código que crea la clave “EMAIL”. En lugar de adjuntar un nuevo diccionario para cada par clave-valor, puedes crear un nuevo diccionario con todos los pares clave-valor y asignarlo a la clave “EMAIL”. Aquí tienes una versión revisada del código que debería darte la salida deseada:

    def parse_json(self, data):
        file = 'vault.json'
        json = {}
        for obj in data:
            if 'EMAIL' in obj[0]:
                # crear un nuevo diccionario con todos los pares clave-valor para EMAIL
                email_dict = {
                    'EMAIL_CC': obj[1].get('EMAIL_CC', ''),
                    'EMAIL_CCO': obj[1].get('EMAIL_CCO', ''),
                    'EMAIL_DESTINY': obj[1].get('EMAIL_DESTINY', '')
                }
                json['EMAIL'] = email_dict
            if 'TEST' in obj[0]:
                json.setdefault('TEST', []).append({obj[0]: obj[1]})
            else:
                json.setdefault('VAULT', []).append({obj[0]: obj[1]})
    
        with open(file, 'w') as f:
            dump(json, f, indent=2, separators=(',', ':'))
    

    Esto debería darte la siguiente salida:

    {
      "EMAIL":{
        "EMAIL_CC":"",
        "EMAIL_CCO":"",
        "EMAIL_DESTINY":"teste@gmail.com"
      }
    }
    

Comments are closed.