Jump to content
Pitag346

Problemas com json_decode

Recommended Posts

Olá pessoal, beleza?

 

estou com um problema... tenho uma requisição json, ou seja um api... que encontra-se assim: (exemplo)

{"4460961":[{"name":"Urgot's Shadowdancers","tier":"SILVER","queue":"RANKED_SOLO_5x5","entries":[{"playerOrTeamId":"4460961","playerOrTeamName":"Bonbonha","division":"IV","leaguePoints":3,"wins":90,"losses":83,"isHotStreak":false,"isVeteran":false,"isFreshBlood":false,"isInactive":false}]},{"name":"Jax's Crusaders","tier":"SILVER","queue":"RANKED_FLEX_SR","entries":[{"playerOrTeamId":"4460961","playerOrTeamName":"Bonbonha","division":"V","leaguePoints":62,"wins":69,"losses":68,"isHotStreak":false,"isVeteran":false,"isFreshBlood":false,"isInactive":false}]}]}

Como podem ver, os índices se repetem... ou seja estão com os índices duplicados e os valores estão diferentes de cada um...

gostaria de separa-los, então utilizei:

foreach($obj2 as $key => $value){


$tier = $value[0]['tier'];
$rank = $value[0]['division'];


}

o único erro retornado é: Notice: Undefined index: division ... mas o division está definido na API ... 

não sei oque fazer, e não sei porque não está reconhecendo o indice => "division" ... mas o indice => "tier" está funcionando normal...

 

 

Espero que ajudem-me...

Agradeço desde já!

Share this post


Link to post
Share on other sites

Olá!

Aparentemente o index 'division' está dentro de entries:

[4460961] => Array
        (
            [0] => stdClass Object
                (
                    [name] => Urgot's Shadowdancers
                    [tier] => SILVER
                    [queue] => RANKED_SOLO_5x5
                    [entries] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [playerOrTeamId] => 4460961
                                    [playerOrTeamName] => Bonbonha
                                    [division] => IV
                                    [leaguePoints] => 3
                                    [wins] => 90
                                    [losses] => 83
                                    [isHotStreak] => 
                                    [isVeteran] => 
                                    [isFreshBlood] => 
                                    [isInactive] => 
                                )

                        )

                )

            [1] => stdClass Object
                (
                    [name] => Jax's Crusaders
                    [tier] => SILVER
                    [queue] => RANKED_FLEX_SR
                    [entries] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [playerOrTeamId] => 4460961
                                    [playerOrTeamName] => Bonbonha
                                    [division] => V
                                    [leaguePoints] => 62
                                    [wins] => 69
                                    [losses] => 68
                                    [isHotStreak] => 
                                    [isVeteran] => 
                                    [isFreshBlood] => 
                                    [isInactive] => 
                                )

                        )

                )

        )

Creio que você poderá alcançá-lo assim:

   $tier = $value[0]->tier;
   $division = $value[0]->entries[0]->division;

 

  • +1 1

Share this post


Link to post
Share on other sites
1 hora atrás, washalbano disse:

Olá!

Aparentemente o index 'division' está dentro de entries:


[4460961] => Array
        (
            [0] => stdClass Object
                (
                    [name] => Urgot's Shadowdancers
                    [tier] => SILVER
                    [queue] => RANKED_SOLO_5x5
                    [entries] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [playerOrTeamId] => 4460961
                                    [playerOrTeamName] => Bonbonha
                                    [division] => IV
                                    [leaguePoints] => 3
                                    [wins] => 90
                                    [losses] => 83
                                    [isHotStreak] => 
                                    [isVeteran] => 
                                    [isFreshBlood] => 
                                    [isInactive] => 
                                )

                        )

                )

            [1] => stdClass Object
                (
                    [name] => Jax's Crusaders
                    [tier] => SILVER
                    [queue] => RANKED_FLEX_SR
                    [entries] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [playerOrTeamId] => 4460961
                                    [playerOrTeamName] => Bonbonha
                                    [division] => V
                                    [leaguePoints] => 62
                                    [wins] => 69
                                    [losses] => 68
                                    [isHotStreak] => 
                                    [isVeteran] => 
                                    [isFreshBlood] => 
                                    [isInactive] => 
                                )

                        )

                )

        )

Creio que você poderá alcançá-lo assim:


   $tier = $value[0]->tier;
   $division = $value[0]->entries[0]->division;

 

 

Obrigado amigo, deu certo!!!

 

att.

Share this post


Link to post
Share on other sites

Mas amigo me deparei com mais um problema....

eu utilizo para buscar os valores o "foreach($obj2 as $key => $value)" .... até ai tudo bem... mas quando o valor não existe o API vai me retornar:

{"status":{"message":"Data not found","status_code":404}}

mas o php me exibe um erro:

Cannot use object of type stdClass as array in... PORQUE O VALOR QUE TO PEGANDO NO FOREACH NÃO EXISTE ACREDITO EU...

 

então como eu faço pra verificar se o api estava me retornando not found antes de fazer o foreach ou tem uma outra solução pra isso ???

 

segue o código:

 

foreach($obj2 as $key => $value){

   $tier = $value[0]->tier;
   $division = $value[0]->entries[0]->division;
   
}

 

Share this post


Link to post
Share on other sites

Olá! Você está tentando usar um objeto como array

Quando for usar objeto, use a setinha ->
Quando for em array use os colchetes [ ]

Verifique o tipo de variável, para poder usar os elementos adequados

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 Giovanird
      Olá a todos!

      Abaixo lista minha estrutura em Json. Há grupos que faltam um objeto (TIPO) e ao listar recebo o erro  por não encontrá-lo.
      Existe alguma maneira de verificar se este objeto existe e caso não, ignorar?

      Desde já agradeço a atenção.

       
      ESTUTURA JSON: [ { “titulo”: “JSON”, “data”: “20/10/2020”, “ano”: 2020, “tipo”: novo }, { “titulo”: “HTML”, “data”: “20/10/2020”, “ano”: 2020, “tipo”: usado }, { “titulo”: “PHP”, “data”: “20/10/2020”, “ano”: 2020 } ] CAPTURANDO OS DADOS: $titulo = $decode->titulo; $data = $decode->data; $ano = $decode->ano; $tipo = $decode->tipo;  
       
    • By ZeroEnd
      Boa tarde.
       
      Gostaria que me ajudassem em uma dúvida, pois estou aprendendo. 
      Tenho um arquivo com o seguinte código.
       
      Ex:
      <?php $dados = '{"nome":"Antonio", "endereco":"Rua que sobe e desce", "telefone": "+55 xx 9 9xxxx-xxxx"}'; $obj = json_decode($dados); echo "Nome: $obj->nome<br>"; echo "Endereço: $obj->endereco<br>"; echo "Telefone: $obj->telefone<br>";  
      Bom esse retorna: 
       
      Nome: Antonio
      Endereço: Rua que sobe e desce
      Telefone: +55 xx 9 9xxxx-xxxx
       
      Agora o problema que enfrento é que eu quero usar um arquivo .json externo, mas não sei o que fazer.
      ex:
      nome-do-arquivo.json
       
      {"nome":"Antonio", "endereco":"Rua que sobe e desce", "telefone": "+55 xx 9 9xxxx-xxxx"}  
      Como que eu faria para chamar o arquivo com php.
       
      Desde já agradeço pela ajuda.
    • By thiagocola
      Eu peguei esse JSON no site do iFood e estou com dúvida de como converter esses 8 números em Time (HH:mm).
      Já tentei timestamp mas 8 dígitos é muito pequeno e já tentei ticks.
      Estou usando C#.
       
      "openingHours": [
                        {
                          "dayOfWeek": "MONDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "TUESDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "WEDNESDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "THURSDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "FRIDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "SATURDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        },
                        {
                          "dayOfWeek": "SUNDAY",
                          "openingTime": 13500000,
                          "closingTime": 97140000
                        }
                      ]
       
      Estou achando que tenho que fazer algum tipo de multiplicação ou em última hipótese, esse valor é algum identificador interno do sistema deles.
       
      Tentei converter assim:
       
      DateTime dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
       
      var openingTime = dtDateTime.AddSeconds(13500000).ToLocalTime();
      // {06/06/1970 03:00:00}
       
      var closingTime = dtDateTime.AddSeconds(97140000).ToLocalTime();
      // {29/01/1973 05:20:00}
       
      Mas os valores que retornam não fazem sentido pra mim.
       
    • By Marcos PP
      Tenho que retornar os dados desta URL e transformar em variaves em PHP

      Ja tentei alguns exemplos mas so me retorna Null

      http://betontec.fortiddns.com:8082/api/login?usuario=joeliton&senha=123

       
      $data = file_get_contents('http://betontec.fortiddns.com:8082/api/login?usuario=joeliton&senha=123'); $data = json_decode($data,true); var_dump($data);  
    • By robertdccaetano
      Pessoal boa tarde, tenho uma dúvida em relação a um problema que estou enfrentando aqui no php ao codificar, podem me ajudar por favor?
       
      É o seguinte, precisava passar dois objetos para o json_encode(), e capturar o atributo "nome" deles num fragmento, porém o callBack passando pelo json_encode está levando só um objeto, observem o print por favor.
       
      Obs: Ja iterei pelo foreach, mas mesmo assim está passando só um objeto pelo encode 



×

Important Information

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