PHP json decode probléma

Címkék
PHP json decode probléma
2021-07-12T16:31:40+02:00
2021-07-19T17:55:47+02:00
2022-08-12T03:45:30+02:00
gyendresz
Sziasztok,
Mit bénázok el, miért nem sikerül dekódolnom a mellékelt jsont?

$data=str_replace('"',"'",$data); $data=str_replace('\/',"/",$data); $json=json_decode($data,true);
Mutasd a teljes hozzászólást!
A két replace-elgetés nem fog kelleni, viszont a keyword-ök köré kellene quote mindenhova. Ha ez csak valami manuálisan szerkesztett fájl, akkor online validátorokkal tudod ellenőrizni/javítani, pl. itt: JSON Formatter & Validator
(Csatoltam egy javított verziót.)

Ha az adat valahonnan máshonnan érkezik, akkor vagy valami regexp-es mágiát kéne rá kitalálni (pl. ha NevemTeve megoldása működik, akkor azt), vagy előfeldolgozásként egy ilyen validátoron átküldeni, biztos létezik PHP-ben implementált verzió is.
Mutasd a teljes hozzászólást!
Csatolt állomány

  • Mellékelt json? Hibaüzenet?
    Mutasd a teljes hozzászólást!
  • Bocs, ez nem az én napom.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Számos macskakörmöt megspóroltál benne, próbáld valahogy így javítani:

    sed 's/\([{,]\)\([a-z]\):/\1"\2\":/g'
    Szerk: viszont a két str_replace-t nem értem, hogy miért csinálod.
    Mutasd a teljes hozzászólást!
  • A két replace-elgetés nem fog kelleni, viszont a keyword-ök köré kellene quote mindenhova. Ha ez csak valami manuálisan szerkesztett fájl, akkor online validátorokkal tudod ellenőrizni/javítani, pl. itt: JSON Formatter & Validator
    (Csatoltam egy javított verziót.)

    Ha az adat valahonnan máshonnan érkezik, akkor vagy valami regexp-es mágiát kéne rá kitalálni (pl. ha NevemTeve megoldása működik, akkor azt), vagy előfeldolgozásként egy ilyen validátoron átküldeni, biztos létezik PHP-ben implementált verzió is.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Sziasztok,

    Ez egy forrásból érkezik és kedvenc json nézegetőm megeszi az eredeti és az általam módosított verziót is csont nélkül de a php nem.
    Ezt a fránya keywordot néztem be , jó hogy csak 3 van benne.

    Biztos lenne rá frappánsabb megoldás, de ezt egy év múlva is meg fogom érteni.

    $data=str_replace('"',"'",$data); $data=str_replace('\/',"/",$data); $data=str_replace('c:','"c":',$data); $data=str_replace('s:','"s":',$data); $data=str_replace('h:','"h":',$data);
    Gondolom, NevemTeve megoldása hasonló végeredményt ad és univerzálisabb is lehet, de nem tudtam php-ra átrakni .
    (Plusz 50 pontért mondja meg valaki, hogy miért készülhetett így? A js-ben más json szabványok a megszokottak?)

    Köszönöm: EGY
    Mutasd a teljes hozzászólást!
  • Ez valami HTML-ből lett kifarigcsálva Lelkes Laca és Jóleszez Jocó által, olyan, amilyen.
    Mutasd a teljes hozzászólást!
  • Láttam már több hasonlót -csak sokkal bonyolultabbat- , szerintem a világ egy másik részében ez egy belső szabvány.
    (Mondom, hogy az online json browser simán megeszi.) 
    Lehet valami implementáció/nyelvi környezet ami nem kényes rá, ezért alkalmazzák. Nem hiszem, hogy szórakozásból lett ilyen.
    (Nem ez lett htm-ből hanem ebből lesz html farigcsálna, de jogos az észrevétel.)

    Üdv: EGY
    Mutasd a teljes hozzászólást!
  • Ahogy tanult kollégáim már mondták, ez bizony nem JSON. Ránézésre Javascript literál, illetve meg is eszi a developer console. (Minden JSON érvényes Javascript literál, de fordítva nem igaz az állítás.)

    Amit lehet próbálni (már a regexes kendácsoláson túl):

    * Ha szeretsz veszélyesen élni, akkor próbáld meg valami JS interpreterrel megetetni. Ez feltételezi, hogy az adatot küldő fél nem fog megpróbálni futtatható kódot vagy egyéb vicces dolgot küldeni.
    * Megnézed a JS szintaxisát, és csinálsz valami parsert ami megeszi a JS literálokat is, nem csak a szigorúan vett JSON-t.

    Vagy olyat is lehet próbálni, hogy az adatot összeállító féltől más formátumot kérni, lehetőleg olyat amit JS nélkül is egyszerű parse-olni.
    Mutasd a teljes hozzászólást!
  • Ha tud valaki olyan php-s valamit ami megeszi az általad beazonosított JS literált, azt megköszönöm (lehet még hasonló feladat) de  addig marad ez a "kendácsolás" , főleg ennél a megoldottnak nyilvánított feladatná.
    (Legalább hasonló esetben már tudni fogom, hogy mit keressek.)

    Kössz. mindenkinek! 

    EGY
    Mutasd a teljes hozzászólást!
  • Egy próbát megérne a Services_JSON PEAR csomag - composerből is elérhető illetve direkten is letölthető, nem muszáj pear install.

    A fenti budapest.json-ból a csatolt txt-t adta vissza ez:

    $json = new Services_JSON(); $value = file_get_contents('Budapest.json'); print_r($json->decode($value));
    A másik témában lévő inputból pedig ez:

    $json = new Services_JSON(); $input ='{cat:{id:a,name:"root",image:b,count:78},parents:[d,x,fJ,{id:yz,name:yA,slug:yB}]}'; var_dump($json->decode($input));
    ezt (a quote nélkül szöveggel nem tudott mit kezdeni, de a többit egész jól parsolta):

    object(stdClass)#2 (2) { ["cat"] => object(stdClass)#3 (4) { ["id"] => NULL ["name"] => string(4) "root" ["image"] => NULL ["count"] => int(78) } ["parents"] => array(4) { [0] => NULL [1] => NULL [2] => NULL [3] => object(stdClass)#4 (3) { ["id"]=> NULL ["name"]=> NULL ["slug"]=> NULL } } }
    Mutasd a teljes hozzászólást!
    Csatolt állomány
Címkék
abcd