Podczas używania pojawia się dziwny błąd json_decode()
. Prawidłowo dekoduje dane (widziałem to za pomocą print_r
), ale kiedy próbuję uzyskać dostęp do informacji w tablicy, otrzymuję:
Fatal error: Cannot use object of type stdClass as array in
C:\Users\Dail\software\abs.php on line 108
Próbowałem tylko: $result['context']
gdzie $result
są zwracane danejson_decode()
Jak mogę odczytać wartości w tej tablicy?
Odpowiedzi:
Użyj drugiego parametru,
json_decode
aby zwrócić tablicę:źródło
Funkcja
json_decode()
domyślnie zwraca obiekt.Możesz uzyskać dostęp do takich danych:
Jeśli masz identyfikatory takie jak
from-date
(łącznik spowodowałby błąd PHP podczas korzystania z powyższej metody), musisz napisać:Jeśli chcesz tablicę, możesz zrobić coś takiego:
Lub rzutuj obiekt na tablicę:
źródło
Musisz uzyskać do niego dostęp,
->
ponieważ jest to obiekt.Zmień kod z:
Do:
źródło
if ($result->context = $var)
To powoduje, że właściwość jest ustawiona na var i zwraca true, bez względu na to.==
, w obecnym stanie przypisujesz$var
wartość$result->context
używając pojedynczej równości=
. Aif statement
czytają to tak, jakby było puste, czy nie, a jeśli$var
ma wartość, oznacza to, że nie jest puste i zawsze zwróci prawdę.Mam dzisiaj ten sam problem, rozwiązany w ten sposób:
Jeśli zadzwonisz
json_decode($somestring)
, otrzymasz Obiekt i musisz uzyskać do niego dostęp$object->key
, ale jeśli zadzwoniszjson_decode($somestring, true)
, dostaniesz słownik i będziesz mógł uzyskać do niego dostęp$array['key']
źródło
Użyj
true
jako drugiego parametru dojson_decode
. Spowoduje to dekodowanie pliku json w tablicy asocjacyjnej zamiaststdObject
instancji:Więcej informacji znajduje się w dokumentacji .
źródło
To nie jest tablica, to obiekt typu stdClass.
Możesz uzyskać do niego dostęp w następujący sposób:
Więcej informacji tutaj: Co to jest stdClass w PHP?
źródło
Jak mawiają Php Manual ,
Kiedy używamy
json_decode();
, otrzymujemy obiekt typu stdClass jako typ zwracany. Argumenty, które mają być przekazane do wewnątrz,print_r()
powinny być tablicą lub łańcuchem. Dlatego nie możemy przekazać obiektu do środkaprint_r()
. Znalazłem 2 sposoby, aby sobie z tym poradzić.Rzuć obiekt na tablicę.
Można to osiągnąć w następujący sposób.
Uzyskując dostęp do klucza obiektu
Jak wspomniano wcześniej, podczas używania
json_decode();
funkcji zwraca obiekt stdClass. możesz uzyskać dostęp do elementów obiektu za pomocą->
operatora.Jeden z nich może także używać wielu kluczy do wyodrębniania elementów podrzędnych, jeśli obiekt zagnieździł tablice.
Są też inne opcje
print_r()
, takie jakvar_dump();
ivar_export();
PS : Ponadto, jeśli ustawisz drugi parametr
json_decode();
natrue
, to automatycznie skonwertuje obiekt naarray();
Oto kilka odnośników:
http://php.net/manual/en/function.print-r.php
http: // php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.var-export.php
źródło
Aby uzyskać tablicę jako wynik ciągu json, powinieneś ustawić drugi parametr jako boolean true.
W przeciwnym razie wynikiem $ będzie obiekt standardowy. ale możesz uzyskać dostęp do wartości jako obiektu.
źródło
Możesz przekonwertować obiekt stdClass na tablicę w następujący sposób:
stdClsss do tablicy
źródło
Kiedy próbujesz uzyskać do niego dostęp jako
$result['context']
, traktujesz go jako tablicę, błąd mówi ci, że faktycznie masz do czynienia z obiektem, to powinieneś uzyskać do niego dostęp jako$result->context
źródło
Oto podpis funkcji:
Gdy param ma wartość false, co jest ustawieniem domyślnym, zwróci odpowiedni typ php. Możesz pobrać wartość tego typu za pomocą paradygmatu object.method.
Gdy param jest prawdziwy, zwróci tablice asocjacyjne.
W przypadku błędu zwróci NULL.
Jeśli chcesz pobrać wartość przez tablicę, ustaw assoc na true.
źródło
Czasami podczas pracy z API po prostu chcesz utrzymać obiekt jako obiekt. Aby uzyskać dostęp do obiektu, który ma zagnieżdżone obiekty, możesz wykonać następujące czynności:
Zakładamy, że po wydrukowaniu obiektu możesz zobaczyć to:
Aby uzyskać dostęp do pierwszej części obiektu:
I to przyniosłoby „sukces”
Teraz kluczujemy pozostałe części:
Oczekiwany wynik to „Robert” z podziałem linii.
Możesz także ponownie przypisać część obiektu do innego obiektu.
Oczekiwany wynik to „Robert” z podziałem linii.
Aby uzyskać dostęp do następnego klawisza „1”, proces jest taki sam.
Oczekiwany wynik to „USA”
Mamy nadzieję, że pomoże ci to zrozumieć przedmioty i dlaczego chcemy zachować obiekt jako przedmiot. Aby uzyskać dostęp do jego właściwości, nie trzeba konwertować obiektu na tablicę.
źródło
zamiast używać nawiasów użyj operatora obiektu, na przykład twoja tablica oparta na obiekcie bazy danych jest tworzona w ten sposób w klasie o nazwie DB:
aby uzyskać dostęp do informacji używam tego kodu w skrypcie kontrolera:
następnie, aby wyświetlić informacje, które sprawdzam, aby sprawdzić, czy wywołania serwisowe zostały ustawione i ma liczbę większą niż 0, pamiętaj, że nie jest to tablica, do której się odwołuję, więc uzyskuję dostęp do rekordów za pomocą operatora obiektu „->” w następujący sposób:
źródło
Ten błąd zniknął mi z oczu, ponieważ moje logowanie do Facebooka nagle przestało działać (zmieniłem również hosty) i zgłosiłem ten błąd. Poprawka jest naprawdę łatwa
Problem dotyczył tego kodu
Zasadniczo funkcja isset () oczekuje tablicy, ale zamiast tego znajduje obiekt. Prostym rozwiązaniem jest konwersja obiektu PHP na tablicę za pomocą kwantyfikatora (tablicowego) . Poniżej przedstawiono poprawiony kod.
Zwróć uwagę na kwantyfikator use off array () w pierwszym wierszu.
źródło
Zmień to na
źródło