Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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! :/
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 );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!
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.
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.
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.
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.
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!
vc vai fazer um foreach(), só ir navegando nos nós.
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.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;Claaaaro!
Agora funcionou perfeitamente! Cara, muito obrigado por toda a ajuda mesmo! :D
basta usar um json_decode()
sugiro usar um foreach, é bem simples.