JSON file PHP tömbbe rakása

JSON file PHP tömbbe rakása
2021-02-14T13:36:57+01:00
2021-02-14T15:39:55+01:00
2022-10-15T21:16:43+02:00
kalmarr
Sziasztok,

amit szeretnék, hogy egy JSON file tartalmát egy PHP tömbbe tegyek.

Elviekben sikerült találtam egy nagyon egyszerű jónak tűnő megoldást Pass JSON string to PHP and push to array, de sajnos van neki egy mellékhatása:

Félmegoldás:

$localFile = '../config/json/country-nationality-listPHP.json'; $data = [$_POST]; // reformat if required $existing = json_decode(file_get_contents($localFile)); $countryNationalityList = array_merge($existing,$data); file_put_contents($localFile,json_encode($countryNationalityList)); echo '<pre>'; print_r($countryNationalityList); echo '</pre>';

A hiba a JSON fileban keletkezik. Ezt ugyanis teljesen össze keveri (kiveszi belőle az entert) és még plusz {"readrecord":"readrecord"}] sorokat is hozzáfűz használat után.

JSON file tartalma:

{"num_code":"850","alpha_2_code":"VI","alpha_3_code":"VIR","country":"Virgin Islands (U.S.)","nationality":"U.S. Virgin Island"},{"num_code":"876","alpha_2_code":"WF","alpha_3_code":"WLF","country":"Wallis and Futuna","nationality":"Wallis and Futuna, Wallisian or Futunan"},{"num_code":"732","alpha_2_code":"EH","alpha_3_code":"ESH","country":"Western Sahara","nationality":"Sahrawi, Sahrawian, Sahraouian"},{"num_code":"887","alpha_2_code":"YE","alpha_3_code":"YEM","country":"Yemen","nationality":"Yemeni"},{"num_code":"894","alpha_2_code":"ZM","alpha_3_code":"ZMB","country":"Zambia","nationality":"Zambian"},{"num_code":"716","alpha_2_code":"ZW","alpha_3_code":"ZWE","country":"Zimbabwe","nationality":"Zimbabwean"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"},{"readrecord":"readrecord"}]

A megoldást nem teljesen értem, ezért nem igazán tudom mit kellene tennem, jelenleg még csak az eredményeknek örülök :)!

Köszi előre!

Kalmi
Mutasd a teljes hozzászólást!
Mire "megoldás" egy fájl másolás? Érted te egyáltalán amit csinálsz? Neked csak ennyi kell:

$localFile = '../config/json/country-nationality-listPHP.json'; $existing = json_decode(file_get_contents($localFile));
Mutasd a teljes hozzászólást!

  • Mi van a JSON fájlban? A kódodban a $existing már maga lehet egy tömb, nem értem miért keversz ide bármilyen POST adatot, pláne egy új tömb nulladik indexeként...
    Mutasd a teljes hozzászólást!
  • Passz nem tudom. Az ötletet a jelzett linken Pass JSON string to PHP and push to array
    találtam ami működik. A JSON file klasszikus file.

    pl:

    Nem kevert állapot (country-nationality-listPHP.json)

    [ { "num_code": "887", "alpha_2_code": "YE", "alpha_3_code": "YEM", "country": "Yemen", "nationality": "Yemeni" }, { "num_code": "894", "alpha_2_code": "ZM", "alpha_3_code": "ZMB", "country": "Zambia", "nationality": "Zambian" }, { "num_code": "716", "alpha_2_code": "ZW", "alpha_3_code": "ZWE", "country": "Zimbabwe", "nationality": "Zimbabwean" } ]
    Mutasd a teljes hozzászólást!
  • Megoldásra szintén nem szép "megoldás".

    echo copy ("../config/json/country-nationality-list.json", "../config/json/country-nationality-listPHP.json");
    Ez is vad ötlet, de működik :)
    Mutasd a teljes hozzászólást!
  • Mire "megoldás" egy fájl másolás? Érted te egyáltalán amit csinálsz? Neked csak ennyi kell:

    $localFile = '../config/json/country-nationality-listPHP.json'; $existing = json_decode(file_get_contents($localFile));
    Mutasd a teljes hozzászólást!
  • Nem teljesen, ha tudnám nem kérdezném ;). Ismétlem van egy problémám és találtam egy megoldást, és a kérdésem is arról szólt, hogy ez nem teljesen jó (a jelzett fórumban is hasonló lehet a gond, de ott túl léptek ezen), ezért is kértem segítséget... na essünk túl a kritikákon... és köszi a segítséget!

    Módosítottam a kódot és javult is a helyzet, nincs hozzáírás, de még mindig "átírja" a file-t (kiveszi az entereket, formázást). Kérdésem, hogy ezt hogyan lehetne megakadályozni, hogy a forrás file maradjon változatlan, mivel ezt máshol használom és nem akarok duplikációkat.

    Esetleg a file tartalmát, valahogy bele lehetne tenni egy változóba, amit ott alakítana át a szükséges formátumban?

    Módosított kód:

    $localFile = '../config/json/country-nationality-listPHP.json'; $existing = json_decode(file_get_contents($localFile)); $countryNationalityList = array_merge($existing); file_put_contents($localFile,json_encode($countryNationalityList));
    Mutasd a teljes hozzászólást!
  • és rájöttem!

    Nem kell az utolsó sor se.... nem is értem miért kellet, de mindegy engedjük el!

    $localFile = '../config/json/country-nationality-listPHP.json'; $existing = json_decode(file_get_contents($localFile)); $countryNationalityList = array_merge($existing);
    Mutasd a teljes hozzászólást!
  • Mi lenne ha leírnád mi a fenét akarsz egyáltalán csinálni?
    A nyitó hozzászólásodban ez a mondat szerepelt mint kérdés:

     amit szeretnék, hogy egy JSON file tartalmát egy PHP tömbbe tegyek.

    Ehhez nem kell több mint a json_decode és a file_get_contents.

    Módosítottam a kódot és javult is a helyzet, nincs hozzáírás, de még mindig "átírja" a file-t (kiveszi az entereket, formázást). Kérdésem, hogy ezt hogyan lehetne megakadályozni, hogy a forrás file maradjon változatlan, mivel ezt máshol használom és nem akarok duplikációkat.

    Egy fájl megnyitás (file_get_contents) nem módosítja az eredeti fájlt. Azzal rontod el hogy vissza is írod (file_put_contents), de ezt miért teszed, ha csak a tartalma kell? Az a két sor amit írtam pontosan elég, minden adat ott lesz a $existing nevű változóban, azt csinálsz vele amit akarsz.
    Mutasd a teljes hozzászólást!
  • Az utolsó előtti sem kell! Az array_merge több tömböt fűz(ne) össze, de neked csak egy van.
    Mutasd a teljes hozzászólást!
  • Ezért a válasz elfogadásért majd kapsz a moderátortól...

    nem is értem miért kellet

    Persze hogy nem, mert a kézikönyvet elolvasni az smafu...
    Mutasd a teljes hozzászólást!
  • Ezer bocs, csak megörültem! Neked jár a pont!
    Mutasd a teljes hozzászólást!
  • Igen működik így is:

    $localFile = '../config/json/country-nationality-list.json'; $countryNationalityList = json_decode(file_get_contents($localFile));
    Kérdésedre a válsz, sokkal bonyolultabbnak gondoltam a megoldást. Az Említett kézikönyvekkel mindig az a probléma, ha tudnám mit kell keresni, akkor sokkal könnyebb lenne, de nem tudom.

    El kezdek keresgélni ötleteket. Utána kezdem érteni, hogy egyáltalán mi a fenét kellene keresni. 100%, hogy a leírás bonyolultabb, mint maga a probléma. Ha meg van a megoldás, na akkor lehet csak neki esni, hogy mi a fenét csinál az ember, mi hogyan működik. Több ezer oldalt hiába olvasgatnék, akkor se jutna eszembe ez a megoldás. Csak a tapasztalati út, hogy egyszer volt egy ilyen probléma és ez volt a megoldás, akkor lehet tovább vinni.....

    Szóval, nem kellene kérdezni, ha tudnám, hogy mit keressek!

    Köszi a segítséget és valahogy jelzem az adminnak, hogy elrontottam a lezárást...
    Mutasd a teljes hozzászólást!
  • Az Említett kézikönyvekkel mindig az a probléma, ha tudnám mit kell keresni, akkor sokkal könnyebb lenne, de nem tudom.

    Nem igaz. Leírtad mit szeretnél: JSON fájl tartalmát PHP tömbbe tenni.

    Induljunk egy sima kereséssel: LMGTFY

    Első találat: PHP: json_decode - Manual

    Leírás: Takes a JSON encoded string and converts it into a PHP variable.

    Azaz JSON szöveget vár. Neked ugye fájlod van. Akkor még egy keresés: LMGTFY

    Első találat: PHP: file_get_contents - Manual

    El kezdek keresgélni ötleteket. Utána kezdem érteni, hogy egyáltalán mi a fenét kellene keresni.

    Ez a baj. Nem "ötleteket" kell keresni, hanem megfogalmazni mit szeretnél és arra keresni. Egyáltalán nem értem minek kevertél ide POST tömböt, array_merge funkciót. Azért, mert teljesen más témában találtál valami kódot amit copy-paste módszerrel akartál használni? Ez a baj. A programozás nem arról szól hogy másolgatunk, hanem arról kellene szóljon hogy érted mit akarsz csinálni, kiválasztod a feladathoz az eszközt, és lépésről lépésre megvalósítod. Minden porcikáját értened kell hogy mit csinál, amúgy nem ér semmit az egész. Van itt a fórumon olyan fórumtárs aki kb. tíz éve ugyanott toporog, mert soha semmit nem akar megérteni / megtanulni, csak másolgat mindenféle szedett-vedett vacakot innen-onnan.

    Pl.: BBcode-ba htmlentities. probléma

    Hidd el, ennek így semmi értelme.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd