Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

284
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda