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

283
Vistas
¿Por qué axios convierte objetos JSON en matrices cuando las claves de objeto son numéricas, consecutivas y comienzan en 0?

Esta es mi solicitud de axios

 axios({ method: 'put', url: url, data: data }).then(function (response) { console.log(response.data) }) .catch(function (error) { console.log(error) })

Se está haciendo a partir de un componente vue para enviar datos de formulario (un componente de tabla).

Luego probé los siguientes objetos JSON para data

 "building": { "a": ['Level 1', 0.0, 0, '', '', true], "b": ['Level 2', 3.8, 40, '', '', false], "c": ['Level 3', 7.6, 50, '', '', false], "d": ['Level 4', 11.4, 50, '', '', false] } // keys not numeric
 "building": { "1": ['Level 1', 0.0, 0, '', '', true], "2": ['Level 2', 3.8, 40, '', '', false], "3": ['Level 3', 7.6, 50, '', '', false], "4": ['Level 4', 11.4, 50, '', '', false] } // keys don't start at 0
 "building": { "0": ['Level 1', 0.0, 0, '', '', true], "2": ['Level 2', 3.8, 40, '', '', false], "3": ['Level 3', 7.6, 50, '', '', false], "4": ['Level 4', 11.4, 50, '', '', false] } // keys not consecutive
 "building": { "0": ['Level 1', 0.0, 0, '', '', true], "1": ['Level 2', 3.8, 40, '', '', false], "2": ['Level 3', 7.6, 50, '', '', false], "3": ['Level 4', 11.4, 50, '', '', false] } // keys are numeric, consecutive, start at 0

Los primeros 3 permanecen como objetos cuando los recibo, pero el cuarto (numérico, consecutivo, comienza en 0) se convierte en una matriz.

¿Cómo evito que esto suceda?

aclaraciones

  • Quiero que los datos que recibo sean un objeto
  • PHP 8 es el backend que recibe la solicitud de venta y luego envía los datos directamente como respuesta
  • Estoy haciendo console.log(data) justo antes de enviar la solicitud axios y ese es un objeto para los 4. Luego console.log(response.data) es un objeto para los primeros 3 y una matriz para el último.
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su problema es que PHP no distingue matrices y objetos. Al convertir hacia y desde JSON, utiliza una regla para determinar si una matriz asociativa debe convertirse en una matriz JSON o en un objeto JSON. Si las claves son claves numéricas secuenciales que comienzan en 0, las convierte en una matriz JSON. De lo contrario, lo convierte en un objeto. Si las claves son cadenas o números aparentemente es irrelevante.

La solución es no convertir hacia y desde matrices asociativas, sino dejar que json_decode() produzca mezclas de matrices y objetos stdClass . Esto le permite realizar un seguimiento de lo que es o no es un objeto. Para hacer eso, no pase un segundo parámetro al decodificar, o pase un false explícito:

 // this variable will probably be of type stdClass $decoded = json_decode($input, false);

Al procesar objetos stdClass en PHP, debe ser un poco más detallado. Usará métodos como property_exists() (en lugar de array_key_exists() o isset() ) y para iterar, primero deberá convertir a una array , por ejemplo:

 foreach ((array)$decoded as $key => $value) { }

Si no tiene control sobre la decodificación JSON en el servidor, puede considerar cambiar su modelo de datos para que no tenga claves numéricas o escribir código en el lado del cliente que pueda manejar matrices que a veces aparecen en el JSON. cuando se esperan objetos. Es molesto, pero esa es una decisión que PHP tomó hace mucho tiempo y solo tenemos que lidiar con eso.

about 4 years ago · Juan Pablo Isaza 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