Jump to content
gabriel_hcel

Como pegar um atributo json com php?

Recommended Posts

Eai galera, tenho um código para retornar resultados em json e com ele eu consigo retornar os nomes dos produtos mas não consigo retornar os atributos url.

com xml eu fazia assim:

<?php echo $e->links->link['url']; ?>

e ele pegava o atributo certinho, mas em json não estou conseguindo.

 

Código:

<?php
		
	$url = file_get_contents('url aqui');

   
                    $json = json_decode($url);                   
									  
				$produtos = $json->product;
				
								   
               	 foreach ($produtos as $e )
    {
	
	echo $e->product->productname; ?>
    	
    <a href="<?php echo $e->links->link['url']; ?>"> Link </a>
   </br>
		
<?php } ?>

o Json:

 

json.png.b685a913c3498e92a59b178225039f01.png

 

Se souberem, agradeço!

Share this post


Link to post
Share on other sites

tenta assim

echo $e['links']['link']['url'];

 

Share this post


Link to post
Share on other sites

Um cara eu utilizo bastante é esse:

 

http://jsonviewer.stack.hu/

 

Consigo entender melhor a estrutura de dados que tem aquele JSON, fica a dica..

Apesar que nada q um print_r/var_dump não resolva...

<?php

...
...

 
$json = json_decode($url);   

echo '<pre>';
	print_r($json);
echo '</pre>';
	
	

Ps: Indenta esse código pelo amor de deus

 

  • +1 1

Share this post


Link to post
Share on other sites

Objeto deve ser acessado como Objeto.

 

De um print_r e tente acessar da forma correta.

 

Ex:

 

de uma estrutura de array de objetos:

$pessoas[0]->nome

 

Share this post


Link to post
Share on other sites
8 minutos atrás, gabrieldarezzo disse:

Objeto deve ser acessado como Objeto.

 

De um print_r e tente acessar da forma correta.

 

Ex:

 

de uma estrutura de array de objetos:

$pessoas[0]->nome

 

 

O código esta assim:


 <?php
		
	$url = file_get_contents('url aqui');

   
                    $json = json_decode($url, true);                   
									  
				$produtos = $json->product;
				
								   
               	 foreach ($produtos as $e )
    {
	
	echo $e->product[0]->productname .  '</br> - </br>'; 
    	
	echo $e['links'][0]['link']['url'];
	
	
   
	}?>

e esta retornando esses erros:

Screenshot_2.png.1a8d44f752e5954aef9906b201605996.png

  • -1 1

Share this post


Link to post
Share on other sites

dá um var_dump(); assim você vê o tipo (se array ou objeto)

 

exemplo:

 

<?php

echo '<pre>';
var_dump($variavel);//ou print_r($variavel);
echo '</pre>';

 

Share this post


Link to post
Share on other sites

Galera consegui resolver assim:

<?php
		
	$url = file_get_contents('url aqui');

   
                    $json = json_decode($url, true);                   
									  
				$produtos = $json['product'];
				
               	 
		
	
	echo $produtos[0]['product']['productname'] .  '</br> - </br>'; 
    	
	echo $produtos[0]['product']['links'][0]['link']['url'];
	
	
   
	?>

Obrigado a todos!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By clickanapolis
      Boa tarde pessoal, desculpa se postei em lugar errado, mais não sei aonde postar essa minha dúvida. Estou finalizando um projeto que consiste em uma plataforma de processo seletivo e na etapa final os candidatos iram fazer uma prova online.
       
      O cliente me perguntou se é possível bloquear o navegador, tipo se ele sair do navegador ou mudar de aba tipo o sistema finalizar a prova do candidato, visto que o sistema irá identificar que ele foi fazer uma pesquisa.
       
      Eu particularmente não vi nada igual ate hj e não sei se existe algo seja em javascript ou qualquer outro modo de fazer isso.
    • By s3c0
      Fala pessoal,
       
      estou com um probleminha com uma integração, onde preciso ler um resposta JSON em ASP Clássico.
       
      a resposta é
       
      {"id":1,"name":"PAC","price":"45.65","custom_price":"45.65","discount":"7.41","currency":"R$","delivery_time":8,"delivery_range":{"min":8,"max":8},"custom_delivery_time":8,"custom_delivery_range":{"min":8,"max":8},"packages":{"price":"45.65","discount":"7.41","format":"box","dimensions":{"height":20,"width":20,"length":20},"weight":"1.00","insurance_value":"1000.00","products":{"id":"teste1","quantity":1}},"additional_services":{"receipt":true,"own_hand":false,"collect":false},"company":{"id":1,"name":"Correios","picture":"https:\/\/sandbox.melhorenvio.com.br\/images\/shipping-companies\/correios.png"}},{"id":2,"name":"EXPRESSO","price":"68.51","custom_price":"68.51","discount":"11.95","currency":"R$","delivery_time":5,"delivery_range":{"min":5,"max":5},"custom_delivery_time":5,"custom_delivery_range":{"min":5,"max":5},"packages":{"price":"68.51","discount":"11.95","format":"box","dimensions":{"height":20,"width":20,"length":20},"weight":"1.00","insurance_value":"1000.00","products":{"id":"teste1","quantity":1}},"additional_services":{"receipt":true,"own_hand":false,"collect":false},"company":{"id":1,"name":"Correios","picture":"https:\/\/sandbox.melhorenvio.com.br\/images\/shipping-companies\/correios.png"}},{"id":3,"name":".Package","price":"33.51","custom_price":"33.51","discount":"15.58","currency":"R$","delivery_time":6,"delivery_range":{"min":5,"max":6},"custom_delivery_time":6,"custom_delivery_range":{"min":5,"max":6},"packages":{"format":"box","dimensions":{"height":20,"width":20,"length":20},"weight":"1.00","insurance_value":"1000.00","products":{"id":"teste1","quantity":1}},"additional_services":{"receipt":true,"own_hand":false,"collect":false},"company":{"id":2,"name":"JadLog","picture":"https:\/\/sandbox.melhorenvio.com.br\/images\/shipping-companies\/jadlog.png"}},{"id":4,"name":".Com","price":"32.63","custom_price":"32.63","discount":"26.48","currency":"R$","delivery_time":5,"delivery_range":{"min":4,"max":5},"custom_delivery_time":5,"custom_delivery_range":{"min":4,"max":5},"packages":{"format":"box","dimensions":{"height":20,"width":20,"length":20},"weight":"1.00","insurance_value":"1000.00","products":{"id":"teste1","quantity":1}},"additional_services":{"receipt":true,"own_hand":false,"collect":false},"company":{"id":2,"name":"JadLog","picture":"https:\/\/sandbox.melhorenvio.com.br\/images\/shipping-companies\/jadlog.png"}}  
      Tenho a seguinte página para receber essa resposta
       
      <!--#include file="includes/json2.asp"--> <% Dim objXML, Result Set objXML = Server.CreateObject("Microsoft.XMLHTTP") On Error Resume Next For i = 1 To 3 objXML.Open "POST" , url, False , "", "" objXML.setRequestHeader "content-type", "application/json" objXML.setRequestHeader "accept", "application/json" objXML.setRequestHeader "authorization", "Bearer " & Bearer objXML.Send variavel_json If Err.Number = 0 Then Result = objXML.ResponseText end if Exit For Next Set objXML = Nothing Result = replace(replace(Result,"[",""),"]","") a=Split(Result,".png""}},") For Each x In a set x = JSON.parse(Result) Response.write(x.name & vbNewline) Response.write(x.price & vbNewline) Response.write(x.delivery_time & vbNewline) Response.write(x.company.name & vbNewline) Next %> O que ocorre, é que imprimi somente a última linha
       
      Print
      .Com 32.63 5 JadLog .Com 32.63 5 JadLog .Com 32.63 5 JadLog .Com 32.63 5 JadLog  
       
      Alguém poderia me dizer onde estou errando?
       
      Agradeço a atenção de todos!
       
      Abraços
    • By lUANZIKA3
      Olá boa tarde, eu criei um site de assistir jogo de futebol, apenas HTML + CSS E UM Pouco de JS, porém eu gostaria de editar os textos que contem em cada div pelo banco de dados, mais não sei por onde começar,  alguém poderia tirar minha duvida?
      gostaria apenas editar o conteúdo de texto e imagens. o que devo ler, e aprender?
      OBS: O site foi feito em Bootstrap!
      Sou leigo em PHP, alguém pode me ajudar, passar um link de algum forum, onde eu possa aprender a desenvolver esse pequeno utilitário que me ajudara bastante.
       
      Desde já agradeço!
      <div class="card-body"> <!--Title--> <h4 class="card-title">Campeonato Brasileiro Série A</h4> <!-- AS LINHAS QUE EU GOSTARIA DE EDITAR PELO BANCO DE DADOS--> <h6></h6> <h4 class="card-title">São Paulo x Palmeiras</h4> <!-- AS LINHAS QUE EU GOSTARIA DE EDITAR PELO BANCO DE DADOS--> <!--Text--> <p class="card-text">Assita o jogo de <span class="badge badge-primary"> <marquee behavior="slide">13/07 as 19:00</marquee behavior="slide"> </span> vivo, Assita futebol pelo mobile ou pc, online de graça, Brasileirão Série A sportv, premiere <span class="badge badge-danger"> <marquee behavior="slide">São Paulo x Palmeiras</marquee behavior="slide"> </span> é só dar play! </p> <!-- Provides extra visual weight and identifies the primary action in a set of buttons --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#M2">PLAY</button> </div>  
    • By Igor Gabriel
      Boa Tarde, estou com uma dúvida.
       
      Estou criando um site para uma imobiliárias, fiz um sistema de cadastro todo bonitinho onde se encontra funcionando perfeitamente. Contudo fora do sistema, no site, quando clico para ver os imoveis, tenho a listagem de todos os imoveis já cadastrados. Quando entro na página para ver mais do Imóvel é trazido consigo todas as informações presentes no banco, ao invés de uma só. Como faço para trazer uma única informação específica do banco?
    • By leocouto
      Pegar um dado específico de uma tabela, caso tenha mais de um item cadastrado sempre vai pegar o último.
      <form name="editaFornecedor"<?php +1?> action="edit_forne.php" id="editaFornecedor" method="POST"> <!-- Pegando todos os fornecedores cadastrados... --> <table class="table table-striped"> <thead class="thead-dark"> <tr> <th scope="col">ID</th> <th scope="col">Nome</th> <th scope="col">Fone</th> <th scope="col">CNPJ</th> <th scope="col">Rua</th> <th scope="col">Número</th> <th scope="col">Bairro</th> <th scope="col">Estado</th> <th scope="col">Cidade</th> <th scope="col">CEP</th> <th scope="col">E-mail</th> <th scope="col">Observação</th> <th scope="col">Editar|Deletar</th> </tr> </thead> <?php @session_start(); include('conexao.php'); $fornecedor = mysqli_query($conexao, "SELECT * FROM fornecedor"); $linhas = mysqli_num_rows($fornecedor); while ($linhas = mysqli_fetch_array($fornecedor)) { ?> <tbody> <tr> <td><?php echo $linhas['id_fornecedor']; ?></td> <td><?php echo $linhas['nome']; ?></td> <td><?php echo $linhas['fone']; ?></td> <td><?php echo $linhas['cnpj']; ?></td> <td><?php echo $linhas['rua']; ?></td> <td><?php echo $linhas['numero']; ?></td> <td><?php echo $linhas['bairro']; ?></td> <td><?php echo $linhas['estado']; ?></td> <td><?php echo $linhas['cidade']; ?></td> <td><?php echo $linhas['cep']; ?></td> <td><?php echo $linhas['email']; ?></td> <td><?php echo $linhas['observacao']; ?></td> <td> <button type="submit" class="btn btn-secondary" style="height: 35px; width: 100px"><i class="material-icons">description</i>Editar</button><br> <button type="button" class="btn btn-danger" style="height: 35px; width: 100px"><i class="material-icons">delete</i>Deletar</button> </td> <td><input type="text" name="id_fornecedor" value="<?php echo $linhas['id_fornecedor'];?>"></td> </tr> </tbody> <?php } ?> </table> <!-- Fim da exibição de todos os fornecedores cadastrados.. --> </form>  
       
      ======================================================================================================================================================
      Aqui no MYSQL só pega o último item da tabela.. Não pega o que foi clicado no botão.
      <?php include('conexao.php'); session_start(); //$cnpj=$_POST['cnpj']; $id_fornecedor=$_POST['id_fornecedor']; echo $id_fornecedor; ?> =======================================================================================================================================================
      É desse modelo da imagem, mas na hora que clico em editar no mysql aparece o último id e não na linha que cliquei, se eu clicar no primeiro na outra página aparece o id 4, que é o ultimo, quem pode me dar essa força? Ficarei muito grato.

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.