Eu quero retornar JSON de um script PHP.
Eu apenas ecoo o resultado? Eu tenho que definir o Content-Type
cabeçalho?
Embora você normalmente esteja bem sem ele, você pode e deve definir o cabeçalho Content-Type:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Se eu não estiver usando uma estrutura específica, geralmente permito que alguns parâmetros de solicitação modifiquem o comportamento da saída. Pode ser útil, geralmente para solução rápida de problemas, não enviar um cabeçalho ou, às vezes, imprimir a carga útil dos dados para observá-lo (embora na maioria dos casos, isso não seja necessário).
header('Content-type:application/json;charset=utf-8');
Uma parte completa do código PHP agradável e claro que retorna JSON é:
fonte
De acordo com o manual
json_encode
do método, pode retornar uma não-string ( false ):Quando isso acontece
echo json_encode($data)
, gera a cadeia vazia, que é JSON inválida .json_encode
por exemplo, falhará (e retornaráfalse
) se seu argumento contiver uma sequência não UTF-8.Esta condição de erro deve ser capturada no PHP, por exemplo:
Então, o final do recebimento deve estar ciente de que a presença da propriedade jsonError indica uma condição de erro, que deve ser tratada adequadamente.
No modo de produção, pode ser melhor enviar apenas um status de erro genérico ao cliente e registrar as mensagens de erro mais específicas para investigação posterior.
Leia mais sobre como lidar com erros JSON na documentação do PHP .
fonte
charset
parâmetro para JSON; consulte a nota no final de tools.ietf.org/html/rfc8259#section-11 : "Nenhum parâmetro 'charset' está definido para este registro. Adicionar um realmente não afeta os destinatários compatíveis". (JSON deve ser transmitida como UTF-8 por tools.ietf.org/html/rfc8259#section-8.1 , de modo que especifica que é codificado como UTF-8 é um bit redundante.)charset
Parâmetro redundante removido da cadeia de cabeçalho HTTP.Tentar json_encode para codificar os dados e defina o tipo de conteúdo com
header('Content-type: application/json');
.fonte
Defina o tipo de conteúdo com
header('Content-type: application/json');
e, em seguida, faça eco aos seus dados.fonte
Também é bom definir a segurança do acesso - basta substituir * pelo domínio que você deseja alcançar.
Aqui estão mais exemplos disso: como ignorar o Access-Control-Allow-Origin?
fonte
fonte
Como dito acima:
fará o trabalho. mas lembre-se de que:
O Ajax não terá problemas para ler o json, mesmo que esse cabeçalho não seja usado, exceto se o seu json contiver algumas tags HTML. Nesse caso, você precisa definir o cabeçalho como application / json.
Verifique se o seu arquivo não está codificado no UTF8-BOM. Este formato adiciona um caractere na parte superior do arquivo, para que a chamada do cabeçalho () falhe.
fonte
Uma função simples para retornar uma resposta JSON com o código de status HTTP .
fonte
header_remove
, e definir explicitamente a resposta http é uma boa ideia; embora definir status e http_response pareça redundante. Também pode querer adicionar umaexit
declaração ao final. Eu combinei sua função com @trincot é: stackoverflow.com/a/35391449/339440A resposta para sua pergunta está aqui ,
Diz.
portanto, se você definir o cabeçalho para esse tipo e gerar sua sequência JSON, ela funcionará.
fonte
Sim, você precisará usar eco para exibir a saída. Mimetype: application / json
fonte
Se você precisar obter o json do php enviando informações personalizadas, você pode adicioná-las
header('Content-Type: application/json');
antes para imprimir qualquer outra coisa, para que você possa imprimir o seu custoecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
fonte
Se você consultar um banco de dados e precisar do conjunto de resultados no formato JSON, isso poderá ser feito da seguinte maneira:
Para obter ajuda na análise do resultado usando o jQuery, consulte este tutorial .
fonte
Este é um script PHP simples para retornar o sexo feminino e o ID do usuário, pois o valor json será qualquer valor aleatório quando você chamar o script json.php.
Espero que esta ajuda obrigado
fonte
Uma maneira fácil de formatar seus objetos de domínio para JSON é usar o Marshal Serializer . Em seguida, passe os dados
json_encode
e envie o cabeçalho do tipo de conteúdo correto para suas necessidades. Se você estiver usando uma estrutura como o Symfony, não precisará definir manualmente os cabeçalhos. Lá você pode usar o JsonResponse .Por exemplo, o tipo de conteúdo correto para lidar com Javascript seria
application/javascript
.Ou, se você precisar oferecer suporte a alguns navegadores bastante antigos, o mais seguro seria
text/javascript
.Para todos os outros fins, como um aplicativo móvel, use
application/json
como o Tipo de conteúdo.Aqui está um pequeno exemplo:
fonte
Sempre que você estiver tentando retornar a resposta JSON para API, verifique se você possui cabeçalhos adequados e também retorne dados JSON válidos.
Aqui está o script de amostra que ajuda você a retornar a resposta JSON da matriz PHP ou do arquivo JSON.
fonte
Você pode usar esta pequena biblioteca PHP . Ele envia os cabeçalhos e fornece um objeto para usá-lo facilmente.
Parece que:
fonte