Guía y comprobaciones
Codificar datos, no concatenar comillas
json_encode convierte valores PHP en una representación JSON. Si concatenas comillas manualmente, un salto de línea o una comilla dentro de un nombre puede romper la respuesta. Usa datos y deja que el codificador resuelva esos caracteres.
$datos = ['nombre' => 'Línea', 'cantidad' => 2];
echo json_encode($datos, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
echo PHP_EOL;
// {"nombre":"Línea","cantidad":2}
JSON_THROW_ON_ERROR, disponible desde PHP 7.3, permite tratar fallos como excepciones. Para una API, registra el detalle técnico en el servidor y devuelve un mensaje público adecuado; no reveles rutas o credenciales dentro de una excepción.
La forma de las claves cambia el JSON
Una lista con índices consecutivos desde cero se codifica como array JSON. Si eliminas un elemento intermedio, puedes terminar con un objeto cuyas claves son números escritos como texto. Reindexa con array_values cuando el contrato de la API exija una lista.
$lista = ['a', 'b', 'c'];
unset($lista[1]);
echo json_encode($lista), PHP_EOL; // {"0":"a","2":"c"}
echo json_encode(array_values($lista)), PHP_EOL; // ["a","c"]
No reindexes un mapa por accidente: perder sus claves puede ser un error más grave que cambiar la presentación. Decide de antemano si un campo representa una lista o un diccionario.
UTF-8 y salida HTTP
Las cadenas que se codifican deben tener una codificación válida. No utilices sustitución silenciosa de caracteres como primera solución a un origen de datos mal configurado. Revisa archivo, conexión y transformación que produjeron el texto.
En una respuesta JSON, envía Content-Type: application/json; charset=UTF-8 antes de escribir el cuerpo. Un aviso PHP o un texto de depuración anterior al JSON también rompe la respuesta, aunque el resultado de json_encode sea correcto. Para incrustar datos dentro de HTML o JavaScript, utiliza además una estrategia segura para ese contexto; servir JSON como una respuesta independiente evita varias confusiones.
Preguntas frecuentes
¿Por qué mi lista aparece como un objeto?
Comprueba si los índices siguen siendo consecutivos desde cero. Si necesitas una lista y puedes descartar las claves, aplica array_values.
¿Puedo ignorar un fallo de codificación?
Es preferible detectarlo y corregir su causa. JSON_THROW_ON_ERROR permite capturarlo sin confundir un error con una respuesta vacía.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.