Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: JSON decode -problém

Aktivity
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:31.7.2014 14:41

Dobrý den, mám JSON v něm je

{
   "uzivateldata": [
      {
         "uzivatel_data_typ": "vip",
         ......
      },
      {
         "uzivatel_data_typ": "vip.II",
         ......
         }
      }

A nevím jak mám vypsal jen třeba VIP.II protože každý uživatel, v tom jsonu bude mít něco jiného např jeden [výše] a druhý.

{
   "uzivateldata": [
      {
         "uzivatel_data_typ": "vip",
         ......
      },
         "uzivatel_data_typ": "borec",
         ......
      },
      {
         "uzivatel_data_typ": "vip.II",
         ......
         }
      }

normálně bych to udělal:

$neco['uzivateldata']['2']['uzivatel_data_typ']

ale tak to nejde proto, se tu ptám. Děkuji za váš čas.

 
Odpovědět
31.7.2014 14:41
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 16:14

A zkoušel jsi

$neco['uzivateldata'][1]['uzivatel_data_typ']

?
mmchdm. máš ten string vůbec dekódovaný?

Editováno 31.7.2014 16:15
Nahoru Odpovědět
31.7.2014 16:14
Neaktivní uživatelský účet
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Patrik Smělý:31.7.2014 16:15

Ahoj, bohužel to co potřebuji vypsat se nenachází na prvním místě, a ani ten json neovlivním. Takže to nejde jak jsi napsal.

 
Nahoru Odpovědět
31.7.2014 16:15
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 16:17

Malá poznámka : v PHP se pole indexují od nuly (a ve všech ostatních programovacích jazycích taky) + podruhé se ptám : máš ten JSON dekódovaný?

Editováno 31.7.2014 16:17
Nahoru Odpovědět
31.7.2014 16:17
Neaktivní uživatelský účet
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Patrik Smělý:31.7.2014 16:17

Ano mám, ale chápeš já potřebuji vypsat jen data kde se uzivatel_data_typ = vip.II.

Editováno 31.7.2014 16:18
 
Nahoru Odpovědět
31.7.2014 16:17
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Patrik Smělý:31.7.2014 16:17

Toho jsem jsi vědom.

 
Nahoru Odpovědět
31.7.2014 16:17
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 16:18

Tak to projeď cyklem, nebo pokud nepotřebuješ zrovna JSON, tak si to hoď do DB

Nahoru Odpovědět
31.7.2014 16:18
Neaktivní uživatelský účet
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Patrik Smělý:31.7.2014 16:24

JSON právě potřebuji.

 
Nahoru Odpovědět
31.7.2014 16:24
Avatar
Nahoru Odpovědět
31.7.2014 16:24
Neaktivní uživatelský účet
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:31.7.2014 16:28

A nejde to nějak normálně ?

 
Nahoru Odpovědět
31.7.2014 16:28
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 16:30

Ne, leda cyklem, ale při více záznamech to udělá s výkonem nehezké věci.

Nahoru Odpovědět
31.7.2014 16:30
Neaktivní uživatelský účet
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Patrik Smělý:31.7.2014 16:35

To vážně není nic, v php kde by to šlo udělat nějak dobře ? :D

 
Nahoru Odpovědět
31.7.2014 16:35
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 16:37

Přejdi na Python nebo Node.js :)

Nahoru Odpovědět
31.7.2014 16:37
Neaktivní uživatelský účet
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Patrik Smělý:31.7.2014 16:37

O to nemám zájem díky.

 
Nahoru Odpovědět
31.7.2014 16:37
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:31.7.2014 16:44

A ten PHPLinq vypadá zajímavě, dá se dobře použít ?

 
Nahoru Odpovědět
31.7.2014 16:44
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 16:51

Jo, párkrát jsem ho použil pro podobné účely. Však uvidíš jak ti sedne, ale je jednoduchý na použití.

Nahoru Odpovědět
31.7.2014 16:51
Neaktivní uživatelský účet
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 16:52

Zkus něco takovýho:

$data = json_decode($jsonString);
$dataUzivatel = array_column($data["uzivateldata"], "uzivatel_data_typ");
if (in_array("vip.II", $dataUzivatel)) {
  // v poli je vip.II
}

Nemám u sebe novější PHP verzi, která podporuje funkci array_column(), takže to neotestuji, ale mohlo by to fungovat.

Editováno 31.7.2014 16:52
Nahoru Odpovědět
31.7.2014 16:52
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:31.7.2014 16:58

Super díky, ale jak prak vypíši ty hodnoty co jsou v uzivatel_data_typ

 
Nahoru Odpovědět
31.7.2014 16:58
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 17:18

Joo tak to pak bez toho cyklu asi nepůjde. Nenapadá mě jiný způsob, jak zjistit číslo klíče daného záznamu.

Nahoru Odpovědět
31.7.2014 17:18
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 17:24

Teď jsem si vzpomněl na funkci array_search().
Zkoušel jsem tento script a vypsalo mi to 2:

$array = array(
        "uzivateldata" => array(
                array(
                        "typ" => "a",
                        "var" => 1
                ),
                array(
                        "typ" => "b",
                        "var" => 2
                ),
                array(
                        "typ" => "c",
                        "var" => 3
                )
        )
);

$data = array_column($array["uzivateldata"], "typ");
$key = array_search("b", $data);

echo $array["uzivateldata"][$key]["var"];
Nahoru Odpovědět
31.7.2014 17:24
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:31.7.2014 17:31

Takže by to v podstatě šlo i bez cyklu ?

 
Nahoru Odpovědět
31.7.2014 17:31
Avatar
Odpovídá na Patrik Smělý
Neaktivní uživatel:31.7.2014 17:32

Ano, za své poněkud neohrabané řešení se omlouvám

Nahoru Odpovědět
31.7.2014 17:32
Neaktivní uživatelský účet
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):31.7.2014 17:33

Ty funkce uvnitř také určitě nějaké cykly dělají, ale pokud ti takové řešení stačí, tak je nemusíš psát sám.

Nahoru Odpovědět
31.7.2014 17:33
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Artas
Tvůrce
Avatar
Artas:31.7.2014 17:37

Nebo lze pouzit funkci array_filter:

function filterData($var) {
  return $var->uzivatel_data_typ == "vip.II";
}

$json = '{
    "uzivateldata": [
       {
          "uzivatel_data_typ": "vip.II"
          },
       {
          "uzivatel_data_typ": "vip"
       },
       {
          "uzivatel_data_typ": "vip.II"
          }
      ]}';

$data = json_decode($json);
$array = array_filter($data->uzivateldata, "filterData");
print_r($array);
 
Nahoru Odpovědět
31.7.2014 17:37
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:31.7.2014 18:12
"uzivateldata": [
   {
      "uzivatel_data_typ": "mapa",
      "aggregatedStats": {
        "kill": 24,
        "asist": 62,
        "umrti": 2
     },
      },
             {
      "uzivatel_data_typ": "mapa2",
      "aggregatedStats": {
        "kill": 10,
        "asist": 20,
        "umrti": 2
     },
      },
      {
      "uzivatel_data_typ": "mapa3",
      "aggregatedStats": {
        "kill": 20,
        "asist": 10,
        "umrti": 2
     },
      }
  ]}';

a potřebuji vypsal u mapa3 kill, ale problém je že třeba další uživatel může mít mapa4 což už by nešlo.

 
Nahoru Odpovědět
31.7.2014 18:12
Avatar
Artas
Tvůrce
Avatar
Odpovídá na Patrik Smělý
Artas:31.7.2014 18:17

Chapu dobre, ze potrebujes vypsat pocet kill u vsech uzivatelu na mape3?

 
Nahoru Odpovědět
31.7.2014 18:17
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Artas
Patrik Smělý:31.7.2014 18:20

No i všechny co v tom je i či-li i killi u mapy 3.

 
Nahoru Odpovědět
31.7.2014 18:20
Avatar
Artas
Tvůrce
Avatar
Odpovídá na Patrik Smělý
Artas:31.7.2014 18:50

Moje reseni ti vrati pole objektu, ktere obashuji mapa3. Pak uz si je staci jen v cyklu projet a ziskat pozadovane hodnoty:

foreach ($array as $data) {
  echo $data->aggregatedStats->kill;
}
Editováno 31.7.2014 18:50
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
31.7.2014 18:50
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Artas
Patrik Smělý:31.7.2014 19:34

Nefunguje

 
Nahoru Odpovědět
31.7.2014 19:34
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Artas
Patrik Smělý:31.7.2014 19:44

Sorry, je to na 100% funkční měl jsem špatně proměnou. Děkuji za radu moc :)

 
Nahoru Odpovědět
31.7.2014 19:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 30 zpráv z 30.