Skocz do zawartości

json_decode() - jak to działa?


Hawaxi

Rekomendowane odpowiedzi

Witam,

Czytałem dużo tematów i natknąłem się na to json_decode ale nie za bardzo rozumiem jak działa, a w dokumentacji nie mogłem go znaleść.Chciałem pobrać informacje ze strony i później wyświetlać je w mojej grze.

Czy moge wyjąć informacje z tej strony jeśli jej kod zródłowy wygląda tak:

 

{"hawaxi":{"id":28669616,"name":"Hawaxi","profileIconId":552,"summonerLevel":30,"revisionDate":1432142221000}}

Mój kod:

GML
Asynchronous HTTP event:

 

strona = http_get("https://eune.api.pvp.net/api/lol/eune/v1.4/summoner/by-name/Hawaxi?api_key=");

wynik = json_decode(strona);

 

draw event:

 

draw_text(x,y,wynik);

 

Pozdrawiam Hawaxi

Odnośnik do komentarza
Udostępnij na innych stronach

json_decode() zwraca Ci specjalny ds_map. Czemu specjalny? Bo on może w sobie zawierać inne struktury.

W twoim przypadku żeby odczytać coś z tego co podałeś musiałbyś zrobić np tak:

GML
wynik = json_decode(strona);

gracz=wynik[?"hawaxi"]

draw_text(x,y,gracz[?"summonerLevel"])

 

To ze znakiem zapytania to skrócona funkcja do działań na ds_grid. Mam nadzieję że już to umiesz.

 

Edit: Przeniosłem do pytań zaawansowanych. ;)

 

Edit2: Mam nadzieję że http_get() nie obsługujesz tak ja tu napisałeś. Ech, muszę się wyspać bo nie doczytałem. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Okej dzieki wszyskim za pomoc, ale wciąż mam z tym problem.

Mógłby mi ktoś wytłumaczyć co robię źle?

 

HTTP:

GML
strona = http_get("https://eune.api.pvp.net/api/lol/eune/v1.4/summoner/by-name/hawaxi?api_key=")

wynik = json_decode(strona);

gracz = wynik[?"hawaxi"]

 

Draw:

GML
draw_text(x,y,gracz[?"summonerLevel"])

 

Wywala mi błąd z draw_text:

 

Push :: Execution Error - Variable Get 100000.gracz(100002, -2147483648)

at gml_Object_object0_DrawEvent_1 (line 1) - draw_text(x,y,gracz[?"summonerLevel"])

 

Jak wrzuciłem wszystko do draw event, pokazywalo undefined...

 

Pozdrawiam Hawaxi :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

http://docs.yoyogames.com/source/dadiospic...s/http_get.html

 

This function will generate multiple "call backs" which are picked up by any HTTP Events. These will generate a ds_map (more commonly known as a "dictionary") that is exclusive to this event and is stored in the special variable async_load

 

Użyj odpowiedniego eventu (z others), żeby odczytać zapytanie jak zostanie wykonane (to trwa 1-2s).

 

http://docs.yoyogames.com/source/dadiospic...vents/http.html

 

Zresztą w przykładzie który podałem powinno to być prawidłowo zrobione.

Odnośnik do komentarza
Udostępnij na innych stronach

Eh. Myślałem że problem był już rozwiazany. Nie mozesz używać do tego alarmu. Błąd wciaż będzie występować jeżeli ktoś będzie mieć bardzo słaby ping, brak internetu, albo serwer z którego pobierasz informacje padnie.

 

Wystarczy że stworzysz sobie zmienną w create. np:

GML
summonerLevel=""
a potem w event'cie HTTP sprawdzisz czy dane zostały pobrane i przypiszesz je do tej zmiennej.

GML
wynik = json_decode(strona);

gracz = wynik[?"hawaxi"]

summonerLevel=gracz[?"summonerLevel"]

ds_map_destroy(wynik)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...