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.

La aplicación de parches en un conjunto de matrices en Directus mediante una llamada de API no funciona.

Estoy intentando hacer una llamada a la API para actualizar el nombre y las traducciones de un elemento. \
translations es un array con los elementos name y alt_name identificados con un id único. \
El código:

headers = CaseInsensitiveDict()
headers["Accept"] = "application/json"
headers["Content-Type"] = "application/json; charset=utf-8"

for row in reader:
    data = '{"name": "' + row[1] + '", "alt_name": "' + row[2] + '", ' \
            '"translations": [' + \
                '{' + \
                    '"id": "661", "name": "' + row[1] + '", "alt_name": "' + row[2] + '"}, ' + \
                '{' + \
                    '"id": "662", "name": "' + row[3] + '", "alt_name": "' + row[4] + \
           '"}]}'

base_url = 'https://URL/path?&access_token=TOKEN'
resp = requests.patch(base_url, headers=headers, data=data)

Todo excepto dentro de translations se puede modificar sin problemas. ¿Me estoy perdiendo algo obvio?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible que el problema se encuentre en el formato del arreglo translations.

    En el código proporcionado, el arreglo translations se está construyendo como una cadena de caracteres, utilizando concatenación de cadenas para insertar los valores de row. Esto puede propiciar errores, especialmente al trabajar con estructuras de datos complejas como los arreglos.

    Para evitar posibles errores de formato, considere utilizar un diccionario de Python para construir el arreglo translations, y luego convertirlo a JSON utilizando la biblioteca json:

    import json
    
    # ...
    
    for row in reader:
        translations = [
            {
                "id": "661",
                "name": row[1],
                "alt_name": row[2]
            },
            {
                "id": "662",
                "name": row[3],
                "alt_name": row[4]
            }
        ]
    
        data = {
            "name": row[1],
            "alt_name": row[2],
            "translations": translations
        }
    
        # Convertir el diccionario data a JSON
        json_data = json.dumps(data)
    
        # Realizar la llamada a la API utilizando json_data en lugar de data
        resp = requests.patch(base_url, headers=headers, data=json_data)
    

    Utilizar un diccionario y json.dumps() asegura que el arreglo translations esté correctamente formateado y evita cualquier error de sintaxis introducido por la concatenación de cadenas.

Comments are closed.