Skocz do zawartości
LolikZabójca

[PHP} Json encode przy mixed varibles

Rekomendowane odpowiedzi

Hejka,

jest jakiś patent na sytuację, w której wczytuję json do array za pomocą json_encode, który ma kilka typów zmiennych?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

rozszerz o co Ci chodzi? i chyba mylisz encode z decode, wiec w ogole ciezko stwierdzic w czym rzecz

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Zarówno json_encode jak i json_decode świetnie radzą sobie ze zmiennymi typu null, bool, string, integer, float, array. Pozostałych JSON nie obsługuje. Przy czym warto pamiętać, że jak chcesz tablicę w PHP dostać, to robi to json_decode($data, true), inaczej masz obiekty.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
1 godzinę temu, Chell napisał:

rozszerz o co Ci chodzi? i chyba mylisz encode z decode, wiec w ogole ciezko stwierdzic w czym rzecz

Decode. Racja

23 minuty temu, gnysek napisał:

Zarówno json_encode jak i json_decode świetnie radzą sobie ze zmiennymi typu null, bool, string, integer, float, array. Pozostałych JSON nie obsługuje. Przy czym warto pamiętać, że jak chcesz tablicę w PHP dostać, to robi to json_decode($data, true), inaczej masz obiekty.

Tzn jak to będzie wyglądało? Czy php może mieć wgl tablice z mieszanymi typami? Powstanie takowa, czy jak zostanie to rozwiązane?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

może, nie ma żadnego problemu żeby istniało coś takiego:
 

[
	'name' => 'buty',
	'price' => 19.99,
	'comfortable' => true,
	'sizes' => [38, 39, 40, 41]
]

trik polega na tym, że json_decode tak jak napisał gnysek przyjmuje dwa argumenty, i drugim jest czy dekodować do tablicy asocjacyjnej, czy tworzyć stdClass (domyslnie false do stdclass) - tablica asocjacyjna to wiadomo ['klucz' => wartosc] i odczytuje sie z niej $zmienna['klucz'], a stdClass to taka paskuda pseudoobiektowa, z której zczytujesz $zmienna->klucz - nie uzywaj tego

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Godzinę temu, Chell napisał:

może, nie ma żadnego problemu żeby istniało coś takiego:
 


[
	'name' => 'buty',
	'price' => 19.99,
	'comfortable' => true,
	'sizes' => [38, 39, 40, 41]
]

trik polega na tym, że json_decode tak jak napisał gnysek przyjmuje dwa argumenty, i drugim jest czy dekodować do tablicy asocjacyjnej, czy tworzyć stdClass (domyslnie false do stdclass) - tablica asocjacyjna to wiadomo ['klucz' => wartosc] i odczytuje sie z niej $zmienna['klucz'], a stdClass to taka paskuda pseudoobiektowa, z której zczytujesz $zmienna->klucz - nie uzywaj tego

ale czy tablica asocjacyjna w php może mieć mieszane typy zmiennych?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

'buty', 19.99, true i tablica, jak w przykładzie, to różne typy zmiennych

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Godzinę temu, Chell napisał:

może, nie ma żadnego problemu żeby istniało coś takiego:
 


[
	'name' => 'buty',
	'price' => 19.99,
	'comfortable' => true,
	'sizes' => [38, 39, 40, 41]
]

trik polega na tym, że json_decode tak jak napisał gnysek przyjmuje dwa argumenty, i drugim jest czy dekodować do tablicy asocjacyjnej, czy tworzyć stdClass (domyslnie false do stdclass) - tablica asocjacyjna to wiadomo ['klucz' => wartosc] i odczytuje sie z niej $zmienna['klucz'], a stdClass to taka paskuda pseudoobiektowa, z której zczytujesz $zmienna->klucz - nie uzywaj tego

Nie będę kłamał. Nie rozumiem co oznacza ten zapis strzałkowy xd

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

no to tak właśnie wygląda tablica asocjacyjna. w zwykłej masz po prostu ['cos', 'costam', 'tez cos'], 3 wartosci ktorych klucze to kolejno 0, 1 i 2. zeby zczytac 'costam' musisz sie powolac na $tablica[1]. tablica asocjacyjna to taka, w ktorej sam sobie definiujesz klucze zapisem [klucz => wartosc], np. ['klucz' => 'cos', 'innyklucz' => 'costam', 'jeszcze zupelnie inny klucz' => 'tez cos'] - zeby stad zczytac 'costam' musisz sie powolac na $tablica['innyklucz']

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
7 minut temu, Chell napisał:

no to tak właśnie wygląda tablica asocjacyjna. w zwykłej masz po prostu ['cos', 'costam', 'tez cos'], 3 wartosci ktorych klucze to kolejno 0, 1 i 2. zeby zczytac 'costam' musisz sie powolac na $tablica[1]. tablica asocjacyjna to taka, w ktorej sam sobie definiujesz klucze zapisem [klucz => wartosc], np. ['klucz' => 'cos', 'innyklucz' => 'costam', 'jeszcze zupelnie inny klucz' => 'tez cos'] - zeby stad zczytac 'costam' musisz sie powolac na $tablica['innyklucz']

Tablicę asocjacyjną znam na zasadzie:

array['hp'] = 20;

array['dmg'] = 30;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

no i to jest to samo, zapis strzaleczkowy to definiowanie tablicy od razu z danymi, a nie pustej

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Może mieć różne typy w tablicy, możesz nawet wstawić obiekt klasy (oczywiscie nie dla JSONa, mówię ogólnie), czy zasób (mysql, wskaźnik na plik, itp.).

 

array['hp'] = 20;

array['dmg'] = 30;

 

to to samo co:

 

$array = ['hp' => 20, 'dmg' => 30];

 

z tym, że pierwszy zapis nadpisze/doda dany klucz, a drugi nadpisuje/tworzy całą tablicę.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeszcze jedno. Mam w JSON np. taką wartość:

Cytuj

"ACC_Characters": [
      "1063025"

      "1063026"
    ]

Czy json_encode dobrze mi to odczyta jako tablicę zagnieżdżoną jakby w elemencie tablicy podstaowej?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie, brakuje przecinka. Musisz utrzymać poprawną semantykę JSONa bo Ci się wykrzaczy, rzuci wyjątkiem i tyle.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
4 minuty temu, Konrad-GM napisał:

Nie, brakuje przecinka. Musisz utrzymać poprawną semantykę JSONa bo Ci się wykrzaczy, rzuci wyjątkiem i tyle.

tzn jeśli będą rozdzielone przecinkiem. To akurat moja literówka. Chodziło mi bardziej o przykład :D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

json_encode/decode nie powinien mieć w takim razie problemu, jako przykład może to wyglądać równie dobrze tak:

[
  "foo",
  123456,
  { "bar": 123, "baz": [1, 2, true, true, false] },
  [1, 2, { "value": 3 }, null]
]

 

Edytowane przez Konrad-GM
Zapomniałem o cudzysłowach w JSONie kek

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
36 minut temu, Konrad-GM napisał:

json_encode/decode nie powinien mieć w takim razie problemu, jako przykład może to wyglądać równie dobrze tak:


[
  "foo",
  123456,
  { bar: 123, baz: [1, 2, true, true, false] },
  [1, 2, { value: 3 }, null]
]

 

Zupełnie nie rozumiem tego zapisu :(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
6 minut temu, LolikZabójca napisał:

Zupełnie nie rozumiem tego zapisu :(

To jest zapis w JSONie, w PHP wygląda on tak (jako tablice asocjacyjne):

<?php
$array = [
  "foo",
  123456,
  ["bar" => 123, "baz" => [1, 2, true, true, false]],
  [1, 2, ["value" => 3], null]
];

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Może po prostu weź napisz zgodnego składniowo JSONa i sprawdź, a nie nas pytasz ? W 10 sekund byś miał odpowiedź :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×