Diskuze: JSON decode -problém

PHP PHP JSON decode -problém American English version English version

Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Patrik Smělý (SogoCZE):

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
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Filip Šohajek:

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
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý (SogoCZE):

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
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Filip Šohajek:

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
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý (SogoCZE):

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
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Nahoru Odpovědět 31.7.2014 16:17
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Filip Šohajek:

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
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Nahoru Odpovědět 31.7.2014 16:24
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Patrik Smělý (SogoCZE):

A nejde to nějak normálně ?

Nahoru Odpovědět 31.7.2014 16:28
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Filip Šohajek:

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
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na Filip Šohajek
Patrik Smělý (SogoCZE):

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
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
 
Nahoru Odpovědět 31.7.2014 16:37
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Nahoru Odpovědět 31.7.2014 16:37
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Patrik Smělý (SogoCZE):

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

Nahoru Odpovědět 31.7.2014 16:44
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Filip Šohajek:

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
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Martin Konečný (pavelco1998):

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
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý (SogoCZE):

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
PHP můj oblíbený jazyk......
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Martin Konečný (pavelco1998):

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
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Martin Konečný (pavelco1998):

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
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Nahoru Odpovědět 31.7.2014 17:31
PHP můj oblíbený jazyk......
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Filip Šohajek:

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

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

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
Avatar
Artas
Redaktor
Avatar
Artas:

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ý (SogoCZE)
Tým ITnetwork
Avatar
Patrik Smělý (SogoCZE):
"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
PHP můj oblíbený jazyk......
Avatar
Artas
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Artas:

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ý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na Artas
Patrik Smělý (SogoCZE):

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
PHP můj oblíbený jazyk......
Avatar
Artas
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
Artas:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 31.7.2014 18:50
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Nahoru Odpovědět 31.7.2014 19:34
PHP můj oblíbený jazyk......
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na Artas
Patrik Smělý (SogoCZE):

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

Nahoru Odpovědět  +1 31.7.2014 19:44
PHP můj oblíbený jazyk......
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.