Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: cURL jak odczytać json ?
Forum PHP.pl > Forum > PHP
majesgrudziadz
Witam więc tak

czytam cUrl plik json

  1. <?
  2.  
  3. {
  4. "data": {
  5. "achievements": {
  6. "medalCarius": 22,
  7. "maxSniperSeries": 52
  8. }
  9. }
  10. }
  11.  
  12. ?>


i czytam dane w ten sposob

  1. <?
  2. $med = json_decode($jsont, true);
  3.  
  4. $medal = ($med['data']['achievements']);
  5.  
  6. foreach($medal as $imedal){
  7.  
  8. $medalCarius = $imedal['medalCarius'];
  9. }
  10. ?>



podpada mi te zapytanie $med['data']['achievements'] jak je dobrze sformułować ?
próbowałem w ten sposób ...
$med['data']['achievements']
$med['data']{'achievements'}
$med->{'achievements'}

? nie podaje mi danych ... sad.gif

natomiast gdy mam tak:

  1. <?
  2.  
  3. {
  4. "data": {
  5. "vehicles": [
  6. {
  7. "level": 8,
  8. "battle_count": 765,
  9. },
  10. {
  11. "level": 8,
  12. "battle_count": 765,
  13. }
  14. ]
  15. }
  16. }
  17.  
  18. ?>


to zastosowanie $med['data']['vehicles'] zwraca wartości ... nie mogę spobie poradzić gdy zamiast [ jest {

proszę o pomoc
Sephirus
Oj za szybko się poddałeś...

W JSONie {} odpowiada obiektom (dokładniej obiektom klasy stdClass w PHP) a [] tablicom. Zatem:

Kod
{
  "data": {
    "achievements": {
      "medalCarius": 22,
      "maxSniperSeries": 52
     }
  }
}


Wystarczy

  1. $med = json_decode($json);
  2. $medals = $med->data->achievements;
  3. foreach($medals AS $name => $value) {
  4. echo $name.' = '.$value.'<br/>';
  5. }


Ogólnie - jak nie jesteś pewny jak coś zjeść to używaj var_dump. Przykładowo:

  1. $json = '{
  2. "data": {
  3. "achievements": {
  4. "medalCarius": 22,
  5. "maxSniperSeries": 52
  6. }
  7. }
  8. }';
  9.  
  10. $obj = json_decode($json);
  11. var_dump($obj);
  12.  
  13. // zwróci:
  14. //object(stdClass)[15]
  15. // public 'data' =>
  16. // object(stdClass)[16]
  17. // public 'achievements' =>
  18. // object(stdClass)[17]
  19. // public 'medalCarius' => int 22
  20. // public 'maxSniperSeries' => int 52
  21.  
  22. $obj = json_decode($json,true);
  23. var_dump($obj);
  24.  
  25. // zwróci:
  26. //array
  27. // 'data' =>
  28. // array
  29. // 'achievements' =>
  30. // array
  31. // 'medalCarius' => int 22
  32. // 'maxSniperSeries' => int 52


I jak masz stdClass to jedziesz po ->nazwa bądź ->{'nazwa'} a jak masz array to ['nazwa'] smile.gif przecież to proste wink.gif
majesgrudziadz
hmm czy za szybko się poddałem ?

smile.gif 6:00 do pracy
smile.gif 19:00 z pracy
smile.gif 22:00 początek pisania cryptu
smile.gif 2:00 odpalone wszystko ... pozostał ten crypt

hmm rano wstałem i dostałem olśnienia ... zrobiłem tak jak napisałeś smile.gif ... zmęczenie wzięło górę sad.gif

mimo dzięki za odpowiedź ....

1+ punkcik dla ciebie

wyświetla elegancko .... teraz staram sie wgrać dane do bazy .... i .... i klapa sad.gif

  1. <?php
  2. foreach($medals AS $name){
  3.  
  4. $medalCarius = $name->$medalCarius;
  5. $medalHalonen = $name->$medalHalonen;
  6.  
  7. }
  8.  
  9. //SPRAWDZ MEDALE
  10. $mysql_medal = mysql_fetch_array(mysql_query("SELECT * FROM `medale_rezultat` WHERE `id`='$id_acc'"));
  11.  
  12. if($mysql_medal['id'] == $id_acc){
  13.  
  14. $aktualizacja = time();
  15.  
  16. mysql_query("UPDATE `medale_rezultat` SET
  17.  
  18. `id_clan`='$id_clan',
  19. `id`='$id_acc',
  20. `aktualizacja`='$aktualizacja',
  21. `medalCarius`='$medalCarius',
  22. `medalHalonen`='$medalHalonen'
  23.  
  24. WHERE `id`='$id_acc'");
  25.  
  26. }elseif($mysql_medal['id'] != $id_acc){
  27.  
  28. $aktualizacja = time();
  29.  
  30. mysql_query("INSERT INTO `medale_rezultat` SET
  31.  
  32. `id_clan`='$id_clan',
  33. `id`='$id_acc',
  34. `aktualizacja`='$aktualizacja',
  35. `medalCarius`='$medalCarius',
  36. `medalHalonen`='$medalHalonen'
  37.  
  38. ");
  39.  
  40.  
  41. }
  42. ?>


lecz z wgrywaniem już jest problem ... co mogę mieć nie tak ... przeszukałem google i manuale ... albo jestem ślepy albo nie ma takich info sad.gif
Sephirus
  1. foreach($medals AS $name){
  2.  
  3. $medalCarius = $name->$medalCarius;
  4. $medalHalonen = $name->$medalHalonen;


Coś tu nie gra... pokaż dokładnie co to jest $medals - napewno masz tu błąd.
majesgrudziadz
  1. $med = json_decode($jsont);
  2. $medals = $med->data->achievements;
  3.  
  4. foreach($medals AS $name=>$value){
  5.  
  6. echo var_dump($value);
  7.  
  8. }


zwraca

int(2)
int(0)
int(6)
int(0)
int(1)
int(4)
int(0)
int(3)
Sephirus
Foreach Ci nie potrzebny...

  1. $med = json_decode($jsont);
  2. $medals = $med->data->achievements;
  3.  
  4. $medalCarius = $medals->medalCarius;
  5. $medalHalonen = $medals->medalHalonen;
  6.  
  7. //SPRAWDZ MEDALE
  8. $mysql_medal = mysql_fetch_..... // dalszy kod
  9.  
majesgrudziadz
takie zapytanie również układałem i mi nie balangało ... już wiem dlaczego ... cały czas działałem w obrębie forech ... ehhh facepalmxd.gif ze mnie

dzieki i pozdrawiam ...

+ leci kolejny smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.