Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CleitonGarcia

While de Json multidimensional

Recommended Posts

Tenho um array multidimensional que é codificado em Json pelo PHP. Depois eu retorno esses dados, mas como fazer para listar todos os dados com um While ou Foreach?

 

E além disso, como recuperar um valor de um determinado parâmetro? Ex.: $this->json->id->1->name;

 

Algo como descrito acima.

 

Alguém já passou por essa dificuldade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

basta usar um json_decode()

 

sugiro usar um foreach, é bem simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentei, tentei e tentei, sempre me retornando erro ou não funcionando. Usei isso e retorna em branco, ao menos no CodeIgniter!

 

Consigo utilizar essa livraria para recuperar um conteúdo Json que seja apenas um registro, mas uma listagem de vários, não consigo.

 

Eis minha tentativa de solução:

 

libraries/json.php

 

 

 

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 


class Json {


    public function data()
    {
    $apilocation = 'http://localhost/api/data.json?type=dynamic';


$curl = curl_init($apilocation);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$api = curl_exec($curl);
curl_close($curl);
$api = json_decode($api);


while($api) {


   echo $api['name'];
}
    }
}


/* End of file json.php */

 

Assim não resulta nenhum erro mas também não é exibido o conteúdo que desejo.
Na homepage fiz:

 

$this->api->data();

 

Retorna em branco! :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

não não cara.. nada a ver isso ai.

 

faça isso aqui, e poste o resultado:

$api = json_decode($api);
var_dump( $api );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este código gera o array com os dados Json:

 

 

 

if (isset($_GET['type']) && $_GET['type'] == 'dynamic')
{
$data = array();


$result = $mysql->sql_query("select * from customers");


while ($row = mysql_fetch_array($result)) { 
$data[$row['id']] = array(
'Name' => $row['name'],
'Surname' => $row['surname']
);
}


$api = json_encode($data);
}

 

Está gerando o Json perfeitamente.
O var_dump retorna NULL!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc faz um get desse arquivo ai, aqui:

$api = json_encode($data);
troque por:
echo json_encode($data);
e depois poste var_dump() q pedi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde,

 

Testei aqui e dei um print_r :

{"1":{"Nome":"angelo rogerio rubin","Idade":"35"},"2":{"Nome":"marcelo da costa","Idade":"29"}} 

Então fiz um teste aqui (http://jsonviewer.stack.hu) para ver se estava correta a estrutura do json de retorno do php e esta tudo normal mesmo, veja:

{
  "1": {
    "Nome": "angelo rogerio rubin",
    "Idade": "35"
  },
  "2": {
    "Nome": "marcelo da costa",
    "Idade": "29"
  }
}

Provavelmente o erro esta antes como citou o William.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então William, só que pra tornar essa Api "mais segura" eu não gostaria de exibir os dados ao acessar a URL da api. Só no código que recupera essa Api externamente. Ou seja, ao acessar a url devida no navegador será exibido em branco, mas com o CURL recuperando ela, será exibida. Por isso eu passo os valores pela string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso eu passo os valores pela string.

isso não funciona cara, com o curl é impossível vc capturar o json lá, por isso o NULL.

 

 

se vc quer falar de segurança, crie uma autenticação.

Mostrar ou não na url, não vai deixa-la segura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro William pensei a mesma coisa que você disse após fazer, mas talvez haja algum tipo de segurança. Talvez. Pois dificulta o acesso a real informação. Além de ter a URL, que inclusive tem autenticação, que é um código em SHA, pra ter acesso a esses dados dessa API somente se a API encontrar o token sha no banco de dados em uma tabela especifica. Assim posso criar multitokens de autenticação e além de poder fazer um field de status, ativa, desativa!

 

Mas então certo, o Json não é capaz de capturar strings.



Claro, agorei fiz da maneira exibindo os dados, funcionou perfeitamente. Exibiu em objeto o Json. Como eu faço o While agora?

 

E mais... como vou recuperar o nome de um registro do While?

 

Tô pego!

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc vai fazer um foreach(), só ir navegando nos nós.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cannot use object of type stdClass as array in api.php on line 17

 

Fiz um foreach:

 

 

foreach($api as $value){
   echo $value['name'];
}

Acredito que a dificuldade agora é.. como acessar pela string os valores do Json. Pois está dizendo que não é possível tratar como string o Json recuperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o seu erro não é o foreach(), é a sua forma de tentar mostrar os valores.

 

no lugar de:

   echo $value['name'];
coloque:
   echo $value->name;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.