Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

458
Vistas
¿Cómo manejar las respuestas API (JSON) que contienen \x00 (o \u0000) en sus datos y almacenar los datos en Postgres usando modelos django?

Estoy haciendo una llamada a la API e intento almacenar su respuesta en Postgres usando modelos de Django. Esto es lo que he estado haciendo:

 response = requests.post(url='some.url.com', data=json.dumps(data), headers={'some': 'header'}) response_data = json.loads(response.content.decode('utf-8')) #handler is a object of a model handler.api_response = response_data handler.save()

Pero esto solía fallar, cuando mi json tenía campos como 'field_name': '\x00\x00\x00\x00\x00' . Solía dar el siguiente error:

 DataError at /api/booking/reprice/ unsupported Unicode escape sequence LINE 1: ... NULL, "api_status" = 0, "api_response" = '{"errorRe... ^ DETAIL: \u0000 cannot be converted to text. CONTEXT: JSON data, line 1: ..."hoursConfirmed": 0, "field_name":...

Cómo traté de resolver esto es usando lo siguiente:

 response = requests.post(url='some.url.com', data=json.dumps(data), headers={'some': 'header'}) response_data = json.loads(response.content.decode('utf-8')) #handler is a object of a model handler.api_response = json.loads(json.dumps(response_data).encode("unicode-escape").decode()) handler.save()

El problema inicial se resolvió entonces. Pero recientemente, cuando obtuve un campo con el valor 'field2_name': 'Hey "Whats up"' . Esta cosa falló al dar error:

 json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 143 (char 142)

Probablemente porque json.loads() se confundió con " dentro del valor como un adjunto " y no como un escape " .

Ahora, si imprimo la respuesta inicial justo después json.loads(response.content.decode('utf-8')) , muestra el campo como \x00\x00\x00\x00\x00 .

Pero salida del siguiente código:

 response = requests.post(url='some.url.com', data=json.dumps(data), headers={'some': 'header'}) response_data = json.loads(response.content.decode('utf-8')) print(json.dumps(response_data))

Esto muestra el campo como \\u0000\\u0000\\u0000\\u0000\\u0000 . ¿Cómo cambia \x00 a \\u0000

¿Y cómo guardo este campo en tablas de postgres? Esto es lo que podría pensar.

 json.loads(json.dumps(response_data).replace('\\u0000',''))

Para agregar esta declaración antes de guardar en postgres.

¿Hay una mejor manera?

¿El código response_data = json.loads(response.content.decode('utf-8')) incorrecto? ¿O haciendo que no se escape ese personaje en particular?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

FWIW, recientemente me encontré con esto y su solución propuesta también funcionó para mí. Creo que es probablemente la forma más sencilla de lidiar con eso. Aparentemente , este es el único carácter que no puede entrar en una columna JSON de Postgres .

 json.loads(json.dumps(response_data).replace('\\u0000',''))
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda