How to transform a query into a json?

6

I'm trying to transform the data returned from a database query in Json format, so far it's almost right, but I believe the format is being created incorrectly!

json is being generated as follows!

[{"codigo":"1","nome":"Lucas Marioano Pereira","nascimento":"05\/12\/2001","perfil":"Administrador","estado":"Bahia","cidade":"Afonso Cl?udio"}]
[{"codigo":"3","nome":"Renata Souza De Jesus","nascimento":"08\/06\/2001","perfil":"Administrador","estado":"Bahia","cidade":"Apiac"}]

I'm doing this:

$chamaDados = mysql_query("SELECT * FROM usuario")
    or die("Erro na pesquisa" . mysql_error());

while ( $linha = mysql_fetch_array( $chamaDados ) ) {  
              $codigo     = $linha['codigo'];
              $nome       = $linha['nome'];
              $nascimento = $linha['nascimento'];
              $perfil     = $linha['perfil'];
              $estado     = $linha['estado'];
              $cidade     = $linha['cidade'];        

  $pessoa =  array(
       array(
          'codigo'     => $codigo,
          'nome'       => $nome,
          'nascimento' => $nascimento,
          'perfil'     => $perfil,
          'estado'     => $estado,
          'cidade'     => $cidade
        )
     );    
   echo $o_json = json_encode( $pessoa ); 
}
    
asked by anonymous 17.04.2014 / 15:38

3 answers

5

Instead of always creating a new array it does append, within the loop as follows

  $pessoa[] =
       array(
          'codigo'     => $codigo,
          'nome'       => $nome,
          'nascimento' => $nascimento,
          'perfil'     => $perfil,
          'estado'     => $estado,
          'cidade'     => $cidade
        );

declaring the variable $ person as an array before.

$pessoa = array();
    
17.04.2014 / 15:42
2

Simplify your code by removing the variables $codigo $nome... and pass only $linha and convert the array to json only after the while:

$arr = array();
while ($linha = mysql_fetch_array( $chamaDados ) ) {
    $arr[] = $linha;
}
echo $o_json = json_encode($arr);
    
17.04.2014 / 16:01
2

I would suggest doing as @jose said, but adding the id as the index of the array. (assuming here that code is the id)

$pessoa = array();

while ( $linha = mysql_fetch_array( $chamaDados ) ) {
    $pessoa[ $linha['codigo'] ] = array(
          'codigo'     => $linha['codigo'];
          'nome'       => $linha['nome'];
          'nascimento' => $linha['nascimento'];
          'perfil'     => $linha['perfil'];
          'estado'     => $linha['estado'];
          'cidade'     => $linha['cidade']; 
    );  
}

echo $o_json = json_encode( $pessoa ); 

So, when you need to fetch something from json you can easily identify the item using the index as id.

    
17.04.2014 / 16:49