Ir para conteúdo

Arquivado

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

Ricardo Flores

Como Ler / "Layoutizar" um retorno de Json no PHP

Recommended Posts

Olá pessoal...

To precisando de uma ajuda galera, to tendo retorno de uma API por um URL e ela me retornar o seguinte, abaixo um exemplo:

( [allDone] => 1 [starTime] => 2019-02-21T20:15:41.871318 [endTime] => 2019-02-21T20:15:45.58929 [executionResult] => Array ( [0] => stdClass Object ( [field] => busca_provider_spc_serasa_score [valid] => [observation] => {"Result":[{"MatchKeys":"doc{57279896049}","CreditData":[{"Origin":"SPC","QueryDate":"2019-02-21T00:00:00","BasicData":{"TaxIdNumber":"57279896049","TaxIdCountry":"Brazil","AlternativeIdNumbers":{"VoterRegistration":"6521890442"},"Name":"JANAIR LULA DA SILVA","Gender":"U","BirthDate":"1967-11-30T00:00:00","Age":51,"ZodiacSign":"SAGITARIO","MotherName":"MARIA LULA DA SILVA","TaxIdStatus":"","TaxIdOrigin":"SPC"},"PersonalRelationships":[{"RelatedEntityName":"MARIA LULA DA SILVA","RelationshipType":"MOTHER","RelationshipLevel":"DIRECT"}],"Emails":[],"Phones":[],"Addresses":[{"AddressMain":"R MONTEIO LOBATO","Number":"000107","Complement":"","Neighborhood":"","ZipCode":"95780000","City":"MONTENEGRO","State":"RS","Country":"Brazil"}],"TotalDebts":9217.06,"TotalCount":1,"TotalPreviousQueries":2,"PreviousQueries":[{"Origin":"SPC BRASIL - SAO PAULO / SP","QueryDate":"2019-02-21T00:00:00","Name":"BIG DATA SOLUCOES EM TECNOLOGIA","CityAndState":{"City":"RIO DE JANEIRO","State":"RJ"}},{"Origin":"SPC BRASIL - SAO PAULO / SP","QueryDate":"2019-02-16T00:00:00","Name":"BIG DATA SOLUCOES EM TECNOLOGIA","CityAndState":{"City":"RIO DE JANEIRO","State":"RJ"}}],"Occurrences":[{"Name":"PROTEST","TotalValue":9217.06,"TotalCount":1,"FirstOccurrenceDate":"0001-01-01T00:00:00","LastOccurrenceDate":"2019-01-09T00:00:00","AdditionalOutputData":{},"Details":[{"Origin":"","ExpiringDate":"0001-01-01T00:00:00","Date":"2019-01-09T00:00:00","Reason":"","Value":9217.06,"Count":1,"IssuingPeople":[],"IssuingCompanies":[{"TaxIdNumber":"","OfficialName":"UN","TradeName":"","Phones":[],"Addresses":[{"AddressMain":"","Number":"","Complement":"","Neighborhood":"","ZipCode":"","City":"MONTENEGRO","State":"RS","Country":"Brazil"}],"AdditionalOutputData":{"Contract":""}}],"AdditionalOutputData":{}}]}],"Score":{"Name":"SCORE 12 MONTHS","Class":"F","Horizon":"12","Probability":"0","Score":"0","ScoreType":"RESTRICTED","Reason":"O DOCUMENTO CONSULTADO APRESENTA REGISTRO(S) DE INADIMPLENCIA.","AdditionalOutputData":{}}}]}],"QueryId":"dcff3486-9efe-4628-a8f7-XXXXXXXXXXXX","ElapsedMilliseconds":3277.0,"Status":{"ondemand_credit_spc_score_12_months":[{"Code":0,"Message":"OK"}]}} [validationSource] => provider-spc-serasa-score [available] => 1 [similarity] => 0 ) ) [plds] => Array ( ) [approved] => [disaproveByRule] => [aditionalResponse] => Array ( ) )

Pessoal como visualizo  "layoutizo" o retorno dessa API dentro do PHP?

 

se alguém puder me ajudar fico grato

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você quer dizer com "layoutizar"? Nos de um exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Gabriel Heming disse:

O que você quer dizer com "layoutizar"? Nos de um exemplo.

 

Ola Gabriel... bom dia...

Cara  "layoutizar" eu digo,  deixar de forma apresentável  o retorno da API na tela do usuário, deixar diagramado de forma que o usuário possa ler o que a API retornou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, acho que agora fica melhor... usei o codebeautify.org/jsonviewer e peguei um pedaço da "tree" para visualizar melhor

json.GIF.4090646b67eb85b30387f8f1fa949293.GIF

Esse seria o retorno que tive de uma API em Json...  o problema é que não estou conseguindo carregar o resultado no PHP para poder ser visualizado  de forma ordeira...

to tentando fazer assim mas não ta dando certo 
 

<?php

// Atribui o conteúdo do arquivo para variável $arquivo
$arquivo = file_get_contents('result.json'); // Salvei o retorno do Json com o nome de result.json / 1ª Postagem ta o Json...

// Decodifica o formato JSON e retorna um Objeto
$json = json_decode($arquivo);

// Loop para percorrer o Objeto
foreach($json->result as $registro):
 echo 'Origem: ' . $registro->Origin .  '<br>';
 echo 'Nome: ' . $registro->Name .  '<br>';

 echo 'Total de Débitos: ' . $registro->TotalDebts .  '<br>';

  echo 'País: ' . $registro->TaxIdCountry.  '<br>';      
endforeach;

 

Como São muitas as informações que tenho de buscar da API, eu não estou conseguindo se alguem puder me ajudar ou fazer um modelo para eu seguir ... bha... seria minha salvação

 

Desde ja Agradeço

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Me parece que os caminhos estão errados ou incompletos.

Deveria ser $json->Result->CreditData (perceba o Result maiúsculo).

 

Além disso CreditDebts está dentro de Addrress.

 

Qual é essa Api que você está usando? Achei interessante as informações que ela traz, para uma aplicação minha.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 minutos atrás, Matheus Tavares disse:

Olá!

 

Me parece que os caminhos estão errados ou incompletos.

Deveria ser $json->Result->CreditData (perceba o Result maiúsculo).

 

Além disso CreditDebts está dentro de Addrress.

 

Qual é essa Api que você está usando? Achei interessante as informações que ela traz, para uma aplicação minha.

 

Abraço.

 

Oi Matheus, essa API é de retorno do SPC...

 

 

Poderia me dar um exemplo de como resolver isso " Além disso CreditDebts está dentro de Addrress. "

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

A ideia é mais ou menos essa. Perceba que você tem que percorrer o caminho da chave que você quer acessar.

foreach($json->Result as $registro):
  $Data = $registro->CreditData;

 echo 'Origem: ' . $Data->BasicData->Origin .  '<br>';
 echo 'Nome: ' . $Data->BasicData->Name .  '<br>';

 echo 'Total de Débitos: ' . $Data->Address->TotalDebts .  '<br>';

  echo 'País: ' . $Data->BasicData->TaxIdCountry.  '<br>';      
endforeach;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 minutos atrás, Matheus Tavares disse:

Olá.

A ideia é mais ou menos essa. Perceba que você tem que percorrer o caminho da chave que você quer acessar.


foreach($json->Result as $registro):
  $Data = $registro->CreditData;

 echo 'Origem: ' . $Data->BasicData->Origin .  '<br>';
 echo 'Nome: ' . $Data->BasicData->Name .  '<br>';

 echo 'Total de Débitos: ' . $Data->Address->TotalDebts .  '<br>';

  echo 'País: ' . $Data->BasicData->TaxIdCountry.  '<br>';      
endforeach;

 

 

Matheus, pois é mas não to me acertando com esses caminhos... olha só eu achei outra idéia bem interessantes pois acho que com ela não preciso ficar listando  cada registro... mas também tem o lance dos "caminhos"... se o amigo puder me ajudar  ou outra pessoa fico grato:

Abaixo a API

{
  "Result": [
    {
      "MatchKeys": "doc{57279000000}",
      "CreditData": [
        {
          "Origin": "SPC",
          "QueryDate": "2019-02-21T00:00:00",
          "BasicData": {
            "TaxIdNumber": "57279000000",
            "TaxIdCountry": "Brazil",
            "AlternativeIdNumbers": {
              "VoterRegistration": "6521890442"
            },
            "Name": "JANAIR DOS ",
            "Gender": "U",
            "BirthDate": "1967-11-30T00:00:00",
            "Age": 51,
            "ZodiacSign": "SAGITARIO",
            "MotherName": "MARIA TERES ",
            "TaxIdStatus": "",
            "TaxIdOrigin": "SPC"
          },
          "PersonalRelationships": [
            {
              "RelatedEntityName": "MARIA TERES",
              "RelationshipType": "MOTHER",
              "RelationshipLevel": "DIRECT"
            }
          ],
          "Emails": [],
          "Phones": [],
          "Addresses": [
            {
              "AddressMain": "R MONTEIO LOBATO",
              "Number": "005477",
              "Complement": "",
              "Neighborhood": "",
              "ZipCode": "95780000",
              "City": "MONTENEGRO",
              "State": "RS",
              "Country": "Brazil"
            }
          ],
          "TotalDebts": 9217.06,
          "TotalCount": 1,
          "TotalPreviousQueries": 2,
          "PreviousQueries": [
            {
              "Origin": "SPC BRASIL - SAO PAULO / SP",
              "QueryDate": "2019-02-21T00:00:00",
              "Name": "BIG DATA SOLUCOES EM TECNOLOGIA",
              "CityAndState": {
                "City": "RIO DE JANEIRO",
                "State": "RJ"
              }
            },
            {
              "Origin": "SPC BRASIL - SAO PAULO / SP",
              "QueryDate": "2019-02-16T00:00:00",
              "Name": "BIG DATA SOLUCOES EM TECNOLOGIA",
              "CityAndState": {
                "City": "RIO DE JANEIRO",
                "State": "RJ"
              }
            }
          ],
          "Occurrences": [
            {
              "Name": "PROTEST",
              "TotalValue": 9217.06,
              "TotalCount": 1,
              "FirstOccurrenceDate": "0001-01-01T00:00:00",
              "LastOccurrenceDate": "2019-01-09T00:00:00",
              "AdditionalOutputData": {},
              "Details": [
                {
                  "Origin": "",
                  "ExpiringDate": "0001-01-01T00:00:00",
                  "Date": "2019-01-09T00:00:00",
                  "Reason": "",
                  "Value": 9217.06,
                  "Count": 1,
                  "IssuingPeople": [],
                  "IssuingCompanies": [
                    {
                      "TaxIdNumber": "",
                      "OfficialName": "UN",
                      "TradeName": "",
                      "Phones": [],
                      "Addresses": [
                        {
                          "AddressMain": "",
                          "Number": "",
                          "Complement": "",
                          "Neighborhood": "",
                          "ZipCode": "",
                          "City": "MONTENEGRO",
                          "State": "RS",
                          "Country": "Brazil"
                        }
                      ],
                      "AdditionalOutputData": {
                        "Contract": ""
                      }
                    }
                  ],
                  "AdditionalOutputData": {}
                }
              ]
            }
          ],
          "Score": {
            "Name": "SCORE 12 MONTHS",
            "Class": "F",
            "Horizon": "12",
            "Probability": "0",
            "Score": "0",
            "ScoreType": "RESTRICTED",
            "Reason": "O DOCUMENTO CONSULTADO APRESENTA REGISTRO(S) DE INADIMPLENCIA.",
            "AdditionalOutputData": {}
          }
        }
      ]
    }
  ],
  "QueryId": "dcff3486-9efe-4628-a8f7-dsfdsf4654fds",
  "ElapsedMilliseconds": 3277,
  "Status": {
    "ondemand_credit_spc_score_12_months": [
      {
        "Code": 0,
        "Message": "OK"
      }
    ]
  }
}

agora o o PHP para interpretar o retorno da API / Json

 

<?php
//a opção true vai forçar o retorno da função como array associativo.
$conteudo = json_decode(file_get_contents('resultado.json'), true);

foreach($conteudo as $chave => $registro)
$Data = $registro->CreditData;
{
        $Origin = isset($registro['BasicData']) ? $registro['BasicData'] : [];
        $PersonalRelationships = isset($registro['PersonalRelationships']) ? $registro['PersonalRelationships'] : [];
        $IssuingCompanies = isset($registro['IssuingCompanies']) ? $registro['IssuingCompanies'] : [];
        $Addresses = isset($registro['IssuingCompanies']['Addresses']) ? $registro['IssuingCompanies']['Addresses'] : [];


        /*******************Exibição generica*******************************/
        exibir('BasicData', $Origin);
        exibir('PersonalRelationships', $PersonalRelationships);
        exibir('IssuingCompanies', $IssuingCompanies);
        exibir('Addresses', $Addresses);
}

function exibir($titulo, $registro){
    echo '<br><br>' . $titulo;
    foreach($registro as $chave => $registro){
        if(is_array($registro)){
            foreach($registro as $chave => $valor){
                echo '<br>' . $chave . ' : ' . $valor;
            }
        }else{
            echo '<br>' . $chave . ' : ' . $registro;
        }
    }
}

 

Ou seja... eu acho que to errando no "caminho da chave" ... cara não to conseguindo mesmo  ja tentei de tudo ...

A ideia aqui é que quando ele carregar o  localizar "Addresses" ele mostre tudo o que esta abaixo dele
              "AddressMain": "R MONTEIO LOBATO",
              "Number": "000107",
              "Complement": "",
              "Neighborhood": "",
              "ZipCode": "95780000",
              "City": "MONTENEGRO",
              "State": "RS",
              "Country": "Brazil"

 

ou seja... o bixo ta pegando nesse bendito caminho...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, também se alguém tem alguma outra alternativa ou dica de como  transformar esse retorno WebService em uma tabela HTML eu agradeço... tem uma coisa... os array não são fixo, alguns retornos pode vir mais ou menos informações.

Se alguém puder me ajudar com o PHP acima ou tiver alguma outra dica, fico muito grato a comunidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, você precisa estudar esses tipos do PHP: Array e Objeto.

 

Quando abre chaves "{" é um objeto, então você deve utilizar a flechinha para acessá-lo "->".

Quando abre colchetes "[" é um array, então você deve verificar se esse array possui chave ou se ela está implícita (não aparece), pois se não aparecer (que é o caso em todos os arrays presentes no seu exemplo), significa que está em ordem numérica (0, 1, 2, 3, 4...).

 

Certo, entendido isso, vamos passo-a-passo:

{   ----> abre um objeto
  "Result": [   -> a chave "Result" aponta para um array
    {   -> A primeira chave desse array está implicita, então 0. Esta chave aponta para um objeto
      "MatchKeys": "doc{57279000000}",
      .......

Se tudo isso estiver dentro de uma variável chamada $dados, você acessaria a informação acima dessa forma:

echo $dados->Result[ 0 ]->MatchKeys;

 

Beleza? Basta seguir os passos explicados acima.

O foreach serve para você fazer uma iteração / loop em um conjunto de dados. Sempre que você tem um array e quer exibir todos os valores dentro dele, você pode usar o foreach.

O exemplo que eu postei no meu post anterior estava apenas complementando o que você já tinha desenvolvido, mas não acho que você precise do foreach aqui, pois pelo que percebo trata-se de apenas uma consulta individual (e não um conjunto). Caso você queira processar várias consultas, basta usar o foreach.

 

Outro exemplo:

{
  "Result": [
    {
      "CreditData": [
        {
          "BasicData": {
            "TaxIdNumber": "57279000000",



echo $dados->Result[ 0 ]->CreditData[ 0 ]->BasicData->TaxIdNumber;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matheus, o brigado pela dica... entendi a lógica do Array.

 

Só mai uma pergunta, não abusando ja abusando...  como expresso essa array nessa função abaixo, ou seja, como faço para visualizar o "TaxIdNumber": "57279000000"

 

Array:
 

echo $dados->Result[ 0 ]->CreditData[ 0 ]->BasicData;
-------------------------------------------------------------------------------------------------------------------------------------------------
{
  "Result": [
    {
      "MatchKeys": "doc{57279896049}",
      "CreditData": [
        {
          "Origin": "SPC",
          "QueryDate": "2019-02-21T00:00:00",
          "BasicData": {
            "TaxIdNumber": "57279896049",  ( exibir esses resultados no PHP )
            "TaxIdCountry": "Brazil", ( exibir esses resultados no PHP )

...

...

...

 

<?php
//a opção true vai forçar o retorno da função como array associativo.
$conteudo = json_decode(file_get_contents('json.json'), true);

foreach($conteudo as $chave => $registro)
{
        $Origin = isset($registro['BasicData']) ? $registro['BasicData'] : [];

        /*******************Exibição generica*******************************/
        exibir('BasicData', $BasicData);

}

function exibir($titulo, $registro){
    echo '<br><br>' . $titulo;
    foreach($registro as $chave => $registro){
        if(is_array($registro)){
            foreach($registro as $chave => $valor){
                echo '<br>' . $chave . ' : ' . $valor;
            }
        }else{
            echo '<br>' . $chave . ' : ' . $registro;
        }
    }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Giovanird
      Através do json_decote abaixo:
      $decode = json_decode($json); echo ("<pre>"); print_r ($decode); echo ("</pre>"); Recebo a seguinte estrutura abaixo:
      stdClass Object ( [Data] => Array ( [0] => stdClass Object ( [modelo] => stdClass Object ( [cor] => azul [tamanho] => 43 ) [1] => stdClass Object ( [modelo] => stdClass Object ( [cor] => verde [tamanho] => 44 ) [2] => stdClass Object ( [modelo] => stdClass Object ( [cor] => laranja [tamanho] => 41 ) ) ) E com o seguinte código abaixo, só me retorna a primeira posição "cor"
      $listar = $decode->Data[0]->modelo->cor; echo"Cor: ".$listar."<br>"; Cor: azul Se eu retirar o valor [0] do Array Data não me retorna nada.
      $listar = $decode->Data->modelo->cor; echo"Cor: ".$listar."<br>"; Cor: O que devo fazer para que eu possa receber todas as linhas da lista?
      Cor: azul
      Cor: verde
      Cor: laranja

      Não consegui fazer com o código abaixo, me retornando nada:
      for($i = 0; $i < count($decode['Data']); $i++) { echo "<div>Cor: " . $decode[$i]->{'cor'} . "</div>"; echo "<br />"; }  
×

Informação importante

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