Retornando JSON do PHP para JavaScript?


135

Eu tenho um script PHP que está sendo chamado através do jQuery AJAX. Eu quero que o script PHP retorne os dados no formato JSON para o javascript. Aqui está o pseudo-código no script PHP:

$json = "{";
foreach($result as $addr)
{
    foreach($addr as $line)
    {
        $json .= $line . "\n";
    }
    $json .= "\n\n";
}
$json .= "}";

Basicamente, preciso dos resultados dos dois para que os loops sejam inseridos no $ json.

Respostas:


194

Php possui uma função de serialização JSON embutida.

json_encode

json_encode

Por favor, use isso se você pode e não sofre da síndrome de Not Invented Here.


2
Excelente, obrigado. Na verdade, eu procurei isso antes de postar no SO, mas não achei que estivesse disponível na minha hospedagem.
AquinasTub 25/03/09

Esta 'resposta' não está completa e é inútil. Veja a resposta de aesede para obter informações mais completas.
Funk Doc

@FunkDoc, o OP em questão estava unindo o JSON manualmente, sob a suposição de que era sua única opção. Saber que não era a única opção deles era uma solução adequada. Não obrigação de que o resultado final desse JSON seja emitido como resposta HTTP. As informações "adicionar um cabeçalho", embora úteis para uma situação, não ajudarão se o que você estiver fazendo com esse JSON não for simplesmente "devolvê-lo literalmente à página da web". A pergunta não adicionou esclarecimentos ao caso de uso.
22719 Kent Kentric

(Além disso, definir o cabeçalho não é estritamente necessário para o AJAX. Desculpas se eu parecer abrupto, mas a sombra dada pela palavra "'resposta' 'entre aspas realmente acabou comigo, foi há 10 anos, deixe-o morrer já. Eu segui em frente do PHP há muito tempo que a língua me mudei para agora estou também se afastando).
Kent Fredric

145

Aqui estão algumas coisas que faltam nas respostas anteriores:

  1. Defina o cabeçalho no seu PHP:

    header('Content-type: application/json');
    echo json_encode($array);
    
  2. json_encode()pode retornar uma matriz JavaScript em vez de um objeto JavaScript , consulte:
    Retornando JSON de um script PHP
    Isso pode ser importante em alguns casos, pois matrizes e objetos não são os mesmos.


2
É importante notar que os dados são ecoados em vez de retornados ! Isso me mordeu por um bom tempo quando aprendi o conceito pela primeira vez. Porque na programação geral, quase tudo é retornado geralmente não "impresso".
Juha Untinen

Hey @Juha, lembre-se de que json_encode()(como todas as funções) sempre retorna algo (inclusive NULL); você pode imprimir os dados, processá-lo e, em seguida, imprimi-lo, assing lo a uma variável para uso posterior, salve-o em um arquivo, etc ... Você pode ler mais sobre returnem PHP: Retornando valores . Além disso, você pode (e deve!) Verificar o que cada função que você não conhece retorna; veja nosso exemplo json_encode () afirma: Retorna uma string codificada em JSON em caso de sucesso ou FALSE em caso de falha.
aesede

Naquela época, eu estava me perguntando por que return json_encode($jsonArray);não funcionou (AngularJS http.get não recebi nada), até que mais tarde percebeu isso :)
Juha Untinen

83

Há uma seção JSON na documentação do PHP. Você precisará do PHP 5.2.0.

A partir do PHP 5.2.0, a extensão JSON é empacotada e compilada no PHP por padrão.

Caso contrário, aqui está a biblioteca PECL que você pode instalar.

<?php
    $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

    echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
?>

13

Normalmente, você estaria interessado em também ter alguma estrutura para seus dados no final do recebimento:

json_encode($result)

Isso preservará as chaves da matriz também.

Lembre-se de que json_encode funciona apenas em dados codificados em utf8.


4

Você pode usar o JSON simples para PHP . Ele envia os cabeçalhos para ajudá-lo a forjar o JSON.

Parece que:

<?php
// Include the json class
include('includes/json.php');

// Then create the PHP-Json Object to suits your needs

// Set a variable ; var name = {}
$Json = new json('var', 'name'); 
// Fire a callback ; callback({});
$Json = new json('callback', 'name'); 
// Just send a raw JSON ; {}
$Json = new json();

// Build data
$object = new stdClass();
$object->test = 'OK';
$arraytest = array('1','2','3');
$jsonOnly = '{"Hello" : "darling"}';

// Add some content
$Json->add('width', '565px');
$Json->add('You are logged IN');
$Json->add('An_Object', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);

// Finally, send the JSON.

$Json->send();
?>

Aviso: o JSON simples para PHP é licenciado pela GPLv2, portanto, seu próprio código deve ser de código aberto para usá-lo.
21318 Jamie Birch

1
Agora licença MIT :)
Alexis Paques

1
@JamieBirch Na prática, acho que você está entendendo mal como a GPL funciona. Se você estivesse falando sobre a AGPL, estaria interessado em algo. Porém, vastas áreas da Internet são construídas com o software GPL e não têm obrigação de código-fonte aberto, porque não estão dando aos usuários nenhum executável sob seu controle, apenas fornecendo uma interface para ele. A única obrigação que eles têm é que qualquer pessoa a quem der cópias digitais do projeto também deve receber a fonte.
Kent Fredric

1

$ msg = "Você digitou nome de usuário ou senha incorretos"; $ resposta = json_encode ($ msg);

echo "{\"status\" : \"400\", \"responce\" : \"603\", \"message\" : \"You Enter Wrong Username OR Password\", \"feed\":".str_replace("<p>","",$responso). "}";
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.