Autor Zpráva
MakakSK
Profil *
Ahojte,

máme funkciu na stiahnutie dát z api a uloženie do súboru .json

        // create a file titled 'YYYY-MM-DD' and save the json repsonse to the file
        $storeFile = fopen( 'json_files/' . $date . '.json', 'w' );
        fwrite( $storeFile, $response );
        fclose( $storeFile );

A potom spracovávame a triedime cez

    /**
     * Get store data from the api and save it in a json file
     * @param String $date of the store to save
     * @return void
     */
    function getStoreData( $date ) {
        // make sure we have a json file with store data
        if ( !file_exists( 'json_files/' . $date . '.json' ) ) { // if no json file found for the current date hit the api
            getStoreDataFromAPI( $date );
        }

        // return store data as a php array
        return json_decode( file_get_contents( 'json_files/' . $date . '.json' ), true );
    }
    /**
     * Get formatted store data.
     * @param void
     * @return Array $sortedItems
     */
    function getStoreSortedData( $date ) {
        // get items
        $items = getStoreData( $date );

        // create sorted array with two sections
        $sortedItems = array(
            'Category1' => array(
                'info' => array(
                    'title' => 'FEATURED ITEMS'
                ),
                'items' => array()
            ),
            'Category1' => array(
                'info' => array(
                    'title' => 'DAILY ITEMS'
                ),
                'items' => array()
            )
        );

        foreach ( $items as $item ) {
            // add item to sorted items
            $sortedItems[$item['Category1']]['items'][] = $item;
        }

        // return our sorted items array
        return $sortedItems;
    }    

No a problém nastal keď zmenili v tej api dáta, resp. formát maličko upravili a aktuálne mi ukazuje milión errorov a nič nezobrazí.

Pôvodne mal ten json súbor formát:

[
        {     
             "displayName":"Sample Name",
             "displayAssets":[
                {
                   "displayAsset":"x_1235s",
                   "url":"https://website.com/image1.png",
                   "background":"https://website.com/bg1.png"
                }
             ],
             "Date":"2021-06-12",
             "Category1":"FEATURED ITEMS",
             "price":{
                "regularPrice":1600,
                "finalPrice":1600
             },
        }
       ]

No a teraz má

    {
       "result":true,
       "lastUpdate":{
          "date":"2021-07-12 00:00:08+00:00"
       },
       "nextUpdate":{
          "date":"2021-07-13 00:00:08+00:00"
       },
       "vip":null,
       "extras":null,
       "main":[
        {     
             "displayName":"Sample Name",
             "displayAssets":[
                {
                   "displayAsset":"x_1235s",
                   "url":"https://website.com/image1.png",
                   "background":"https://website.com/bg1.png"
                }
             ],
             "Date":"2021-06-12",
             "Category1":"FEATURED ITEMS",            
             "price":{
                "regularPrice":1600,
                "finalPrice":1600
             },
        }
       ]
    }

Čiže pridali nejaké nové údaje pred to "main", ktoré sme pôvodne spracovávali a naďalej chceme.. A keď ručne vymažem v uloženom json súbory to predtým a "}" na konci tak to funguje, ale je to dosť na nič.

Takže naše funkcie ako napr.
<?php echo $item['displayName']; ?>
<?php echo number_format( $item['price']['regularPrice'] ); ?>
<?php echo $item['displayAssets'][0]['url']; ?>
Prestali fungovať od kedy zmenili ten formát a neviem ako to opraviť? Kamarát programátor je na dovolenke 2 týždne tak skúšam pomoc tu.

Budem rád za každú radu, veľmi php a toto neovládam tak dúfam že som to tu dal všetko a napísal to zrozumiteľne :( ďakujem veľmi veľmi pekne za každú radu
juriad
Profil
Změň řádku:
 return json_decode( file_get_contents( 'json_files/' . $date . '.json' ), true );
na:
$original = json_decode( file_get_contents( 'json_files/' . $date . '.json' ), true );
return $original['main'];

To zajistí, že se ze souboru vyzobne jen ta main část.


Případně o chlup lépe:
return isset($original['main']) ? $original['main'] : $original;

Pak to bude fungovat i pro starší stažené soubory.
MakakSK
Profil *
juriad:
Ďakujem ti veľmi pekne, funguje to perfektne :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0