json_encode creando un JSON con formato incorrecto (con carácter oculto adicional)
Estoy usando PHP'sjson_encode()
para devolver algunos datos, recuperados por jQueryajax()
:
JS simplificado:
$.ajax({
dataType: 'json',
contentType: 'application/json',
cache: false,
type: 'POST',
url: './api/_imgdown.php',
error: function(jqXHR, textStatus, errorThrow) {
console.log(jqXHR, textStatus, errorThrow);
},
success: function(data, textStatus, jqXHR) {
console.log(data, textStatus, jqXHR);
}
});
El PHP es:
header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
Luego, cuando php ejecuta mi código, termina agregando estos datos:
$apiResponse['data'][] = [
"mid" => (int)$mid,
"card_type" => $card_type,
"header_size" => (int)$headers['Content-Length'],
"saved_size" => (int)filesize($imgSavePath),
"saved_path" => $imgSavePath
];
//spit out the JSON
echo json_encode($apiResponse);
exit();
El JSON:
{"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]}
Al principio parece válido. Mi Ajax que recupera este PHP siempre termina conparseerror
(entrando así en laerror
parte deajax()
).
Si copia y pega este JSON enhttp://jsonlint.com/, dice "Token inesperado" yhttp://jsonformatter.curiousconcept.com/ dice no es valido
He intentadoecho json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
aunque escapar de barras está bien\/
pero no hizo ninguna diferencia.
Pero, ¿qué no es exactamente válido? ¿No se suponía que PHP debía devolver JSON válido?
Información adicional: Pruebas en Windows7, Chrome v28.XX, usando PHP 5.4.XX en Apache
Las preguntas que he leído antes de publicar esta:
¿Json_encode creando datos JSON mal formados?https://stackoverflow.com/a/15654848/684932sobre json_encode y ajax dataType: "json"php json_encode no devuelve la cadena codificada json adecuadaActualizar:
Copiar de SO a JSONlint da un json válido. Así que investigué un poco más y noté que PHP está creando un extraño personaje oculto que en realidad está haciendo que json sea inválido. Ver abajo captura de pantalla. ¿Cómo arreglo eso?