Jump to content
mkboy

Decodificar Json com vários níveis

Recommended Posts

Olá,

 

Estou tentando decodificar um Json, já pesquisei um monte e consegui fazer o primeiro nível, mas nao consigo os dados dos demais níveis.

 

Este é o JSON

 

{
  
"content": [
    
	{"id": 5685,
 
	"total": 4403.3,
      
	"shipping": {"city": "Maringa"},
      
        "buyer": {"id": 1658},
     
        "payments": [{
"method": "crediCard"}
      ],
     
        "items": [
 {
          
		"product": {"id": 68178},
		 "sku": {
"id": 68085},
          
		"amount": 1 }
      ],
      
	"deliverStatus": "UNKNOWN"
    },

 

Fiz o seguinte:

 

$resposta = json_decode($retorno);

$content = $resposta->content;

Ai fiz um for para imprimir o resultado:

 

foreach($content as $content_dados) 
			{   
			$id = $content_dados->id;  
													
										
			 echo "<hr>id: ".$id;
																 
			 echo "<br><br>";
												 
		
			}

 

Assim, eu consigo o primeiro resultado, o 5685, mas, não consigo pegar a Cidade que está dentro do content e os outros campos.

 

Como fazer?

Share this post


Link to post
Share on other sites

bota isso aí e veja o que retorna

 

$resposta = json_decode($retorno);

echo '<pre>';
    var_dump($reposta);
echo '</pre>';

 

Share this post


Link to post
Share on other sites

Ajude a si mesmo.

utilize algum 'linter' para visualizar de uma forma melhor:

 

Esse site tem um botão 'Format':

http://jsonviewer.stack.hu/

 

Ajuda bastante,
Outra sacada legal é após color o JSON ali, é possível clicar em 'Viewer' e ir 'escalando' o array.

 

 

 

 

  • -1 1

Share this post


Link to post
Share on other sites

Retorna assim

 


  ["content"]=>
  array(5) {
    [0]=>
    object(stdClass)#3 (19) {
      ["id"]=>
      int(5685)
       
      ["shipping"]=>
      object(stdClass)#4 (7) {
        ["city"]=>
        string(7) "Maringa"
         
      }
      ["buyer"]=>
      object(stdClass)#5 (7) {
        ["id"]=>
        int(1658)
        
      }
      ["payments"]=>
      array(1) {
        [0]=>
        object(stdClass)#6 (6) {
          ["method"]=>
          string(9) "crediCard"
         
        }
      }
      ["items"]=>
      array(1) {
        [0]=>
        object(stdClass)#7 (7) {
          ["product"]=>
          object(stdClass)#8 (2) {
            ["id"]=>
            int(68178)
            
          }
          ["sku"]=>
          object(stdClass)#9 (3) {
            ["id"]=>
            int(68085)
            
          }
          ["amount"]=>
          int(1)
          ["unit"]=>
          float(4403.3)
          
        }
      }
      ["deliverStatus"]=>
      string(7) "UNKNOWN"
    }

 

Share this post


Link to post
Share on other sites

Funcionou, valeu!

 

Ficou assim:

 

$json_a=json_decode($retorno,true);

foreach($json_a[content] as $p)
		{   
			echo '<hr>id: '. $p[id].'<br>';   // 1o nível
			echo 'shipping: '. $p[shipping][city].'<br>';  // 2o nível
		}

 

  • +1 1

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 asacap1000
      Galera me ajudem por favor, estou pirando kkkkk
       
      Seguinte, tenho um form que realiza o submit via javascrit enviando os dados para uma página php formatada em json.
      Está gravando perfeitamente porém preciso dos dados do retorno, como Link do boleto, e alguns outros resultados para inserir no banco nesse ponto já pesquisei um monte testei de tudo até a página bugar e nada kkkk
       
      o Script que utilizo para o envio é esse:
       
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $("#frmBoleto").submit(function(){ $.ajax({ type: "POST", url: "https://www.sitedaloja.com.br/action/boleto_bradesco/gerando_boleto.php", data: $(this).serializeArray(), }).done(function( msg ) { }); return false; }); </script> Como fazer para capturar os dados  da resposta do json?  
    • 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 sronze
      Ola estou com um problema em JavaScript
      O objetivo e digitar um ID/Nome em um input e ele buscar em um arquivo XML fazendo autocomplete e preencher outros dois inputs com os atributos associado ao ID/Nome da base XML.
       
      GIF de exemplo, obs(exatamente oque pretendo fazer): http://blog-media.chromaticsites.com.s3.amazonaws.com/google-places-autocomplete-3/autocomplete-error.gif
       
      Link do XML: https://www.w3schools.com/js/cd_catalog.xm
       
      Segue meu código:
      <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> </head> Nome:<input id="idInput"> UF:<input id="idInput02"> Ano:<input id="idInput03"> <script> var ValorXML1 = []; $(document).on('keyup' , '#idInput' ,function(){ var keyvalue = $("#idInput").val(); var xhttp; xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { ValorXML1 = []; CaregarXML(this , keyvalue); } }; xhttp.open("GET", "https://www.w3schools.com/js/cd_catalog.xml", true); xhttp.send(); }); function CaregarXML(xml , key) { var x, i, xmlDoc , key; xmlDoc = xml.responseXML; x = xmlDoc.getElementsByTagName("TITLE"); var cont = 0; for (i = 0; i < x.length; i++) { var valor = x[i].childNodes[0].nodeValue.trim(); var pattern = valor.substring(0 , key.length); if(key.toUpperCase() == pattern.toUpperCase() && cont < 5){ ValorXML1.push(valor); cont++; } } $("#idInput").autocomplete({ source: ValorXML1 }); } $( function() { $( "#idInput" ).autocomplete({ source:ValorXML1 }); }); </script>  
    • By ricardonews
      Olá pessoal, fiz um formulario de cadastro usando o jquery ,ajax com o json. só que agora eu estou querendo logar  no banco, fiz todo o procedimento normal que se faz para site em php, mas não consegui nada,  eu tenho algumas imagem aqui  vou colocar.
      Queria logar, eu coloquei a index  sem o php porque tentei com php e js mas nao funcionou , alguem pode me ajudar ?
      desde já obrigado.




    • By valdirdillNew
      Bom dia,
       
      Estou tendo dificuldades de ler campos de um texto Json.
       
      O Json puro é este:
      $jsonStr = '
      {"ObjectType":"toDataset", "Direction":"odINOUT", "Encoded":"false", "ValueType":"ovDataSet", "":[{"fields":[{"Field":"CODIGO", "Type":"ftInteger", "Primary":"S", "Required":"S", "Size":0, "Precision":0, "ReadOnly":"N", "Autogeneration":"N"}, {"Field":"NOME", "Type":"ftString", "Primary":"N", "Required":"S", "Size":40, "Precision":0, "ReadOnly":"N", "Autogeneration":"N"}, {"Field":"EMAIL", "Type":"ftString", "Primary":"N", "Required":"S", "Size":60, "Precision":0, "ReadOnly":"N", "Autogeneration":"N"}]}, {"lines":[{"line0":["779", "Juca Santos", "jcas@site.com.br"]}, {"line1":["869", "Paulo da Silva", "paulo@site.com.br"]}]}]}';
       
      Fiz a conversão para array com:
      $jsonArray = json_decode($jsonStr, true);
       
      A minha dificuldade é como pegar o valor dos campos código, nome e e-mail do subArray lines.
      Já tentei de diversas formas, como, por exemplo:
      $nome = $jsonArray['lines'][0][0];
      Tentei também outras opções também, mas não tive êxito.
       
      Alguma sugestão?
       
      Obrigado.
       
       

       
×

Important Information

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