json_encode criando um JSON malformado (com caractere oculto extra)
Estou usando PHP'sjson_encode()
para retornar alguns dados, recuperados pelo 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);
}
});
O PHP é:
header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
Então, quando php executa meu código, ele acaba adicionando esses dados:
$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();
O JSON:
{"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]}
No começo parece válido. Meu Ajax que recupera esse PHP sempre termina comparseerror
(indo assim para oerror
parte deajax()
).
Se você copiar e colar esse JSON emhttp://jsonlint.com/, diz "Token inesperado" ehttp://jsonformatter.curiousconcept.com/ diz que não é válido.
eu tenteiecho json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
mesmo que barras de escape sejam ok\/
mas não fez diferença.
Mas o que não é exatamente válido? O PHP não deveria retornar o JSON válido?
Informações adicionais: teste no Windows7, Chrome v28.XX, usando o PHP 5.4.XX no Apache
Perguntas que li antes de postar esta:
json_encode criação de dados JSON malformados?https://stackoverflow.com/a/15654848/684932sobre json_encode e ajax dataType: "json"php json_encode não está retornando a string codificada json adequadaAtualizar:
Copiar de SO para JSONlint fornece json válido. Então eu investiguei um pouco mais e percebi que o PHP está criando um estranho personagem oculto que está realmente tornando o json inválido. Veja a captura de tela abaixo. Como eu conserto isso?