Hogyan működjön együtt a JSON a PHP-ben – CloudSavvy IT

Avatar admin | 2021.01.27. 20 Views 0 Likes 0 Ratings

20 Views 0 Ratings Rate it

PHP logó

A JSON az egyik leggyakrabban használt adatszerializációs formátum. A JavaScript-ből eredetéből (a JSON azt jelenti, hogy a Java Object Notation) a webes API-k és konfigurációs rendszerek választott formátumává nőtte ki magát.

A PHP beépített JSON támogatással szállítja. Történelmileg a funkciókat külön kiterjesztésként nyújtották. A PHP 8.0 2020-as bevezetése a JSON-t konvertálta egy állandóan aktív kiterjesztés, amelyet nem lehet eltávolítani.

JSON adatok olvasása

A JSON-adatok elemzéséhez használja a json_decode() funkció. Teljes aláírása a következő:

json_decode(string $json, bool|null $associative=null, int $depth=512, int $flags=0) : mixed;

A legegyszerűbb meghívás egy JSON karakterlánc átadása más argumentum nélkül. Dolgozni fogunk {"foo": "bar"} amely dekódolja a PHP általános példányát stdClass. Új objektumunknak lesz ingatlanja foo értékével bar.

Ha inkább asszociatív tömböt szeretne kapni, adja át true hoz $associative paramétere json_decode(). A fenti példa ezt követően dekódolja ["foo" => "bar"].

A $depth A paraméter lehetővé teszi a maximális beágyazási szint szabályozását. Fogsz kapni null ha a JSON a beállított szintnél mélyebben fészkel – az adatok elemzésére nem kerül sor.

A $flags A paraméter elfogadja az elemzési viselkedést megváltoztató opcionális jelzők bitmaszkját. Ezek részletesen leírva a PHP kézikönyvben, és lehetővé teszi, hogy meghatározza, hogyan kell kezelni az adott adattípusokat.

Az elemzési hibák kezelése

Alapértelmezés szerint, json_decode() vissza fog térni null amikor érvénytelen JSON karakterláncot adott át. Ez azért jelent problémát, mert egy elszigetelt null egy érvényes JSON karakterlánc. Sosem tudja megtudni, hogy a null a visszatérési érték a JSON-nak köszönhető tartalmazó null, vagy azért, mert a JSON hibásan volt formázva, és nem lehetett elemezni.

A PHP 7.3 végül megoldotta ezt a régóta fennálló problémát a JSON_THROW_ON_ERROR zászló. Adja át ezt az állandót a $flags paramétere json_decode() hogy a PHP kivételt tegyen érvénytelen JSON esetén:

json_decode("['malformed json", true, 512, JSON_THROW_ON_ERROR);

Enabling this behaviour is generally desirable but it does make for a rather unwieldy invocation. You can use PHP 8’s named arguments to simplify things a bit, as you won’t need to pass explicit values for the optional parameters:

json_decode(json: "['malformed json", flags: JSON_THROW_ON_ERROR);

The two examples shown above are equivalent to each other. The only difference is the latter syntax requires PHP 8.

Serializing data to JSON

You can serialize PHP values into JSON strings using the json_encode() function. Its signature is as follows:

json_encode(mixed $value, int $flags=0, int $depth=512) : string|false;

PHP accepts any value as $value, except for resources. Data types are automatically handled to ensure they have an appropriate mapping in the generated JSON. PHP objects and associative arrays will become JSON objects containing all the enumerable property/key-value pairs of the input value. PHP scalar types map directly into JSON with no transformation.

Like its decoding counterpart, json_encode() accepts $flags and $depth parameters. Take care around the order though – in a quirk of the PHP standard library, the position of these two optional parameters is switched compared to json_decode().

Many more flags are supported when encoding data. Here’s some to be aware of:

  • JSON_FORCE_OBJECT – Convert PHP numerical arrays to JSON objects instead of arrays. This handles the case where a variable contains an associative array which might be empty. When the array is empty ([]), egy JSON tömb jön létre; amikor nem üres (["foo" => "bar"]) helyett egy tárgyat bocsátanának ki. Ennek a jelölésnek az engedélyezése biztosítja, hogy a kódolt JSON-ban mindig egy objektumot használjanak.
  • JSON_PRETTY_PRINT – A PHP JSON kimenete általában kicsinyítve, ami ideális, ha a hálózaton keresztül HTTP-kérelem részeként küldi el. Ennek a jelzőnek a beállítása új sor karaktereket és automatikus behúzást ad a JSON karaktersorozathoz, ami jobban megfelel konfigurációs fájloknak és más esetekben, ahol az emberek elolvassák a kimenetet.
  • JSON_PRESERVE_ZERO_FRACTION – Kényszeríti a PHP-t az úszók kódolására, mint pl 0.0 pontosan, ahelyett, hogy le kellene borotválni a töredéket, hogy írjon 0 a JSON-ba (amelyet helytelenül lehet egész számként értelmezni).
  • JSON_NUMERIC_CHECK – A numerikus karakterláncokat automatikusan konvertálja számokká a JSON kimenetben ahelyett, hogy karakterláncként megtartaná őket. Ha ez engedélyezve van, akkor egy PHP értéket "234.5" -ként bocsátják ki 234.5 a JSON-ban.
  • JSON_PARTIAL_OUTPUT_ON_ERROR – Próbálja meg folytatni az írást akkor is, ha kódolási hiba lép fel. A PHP megpróbálja az érvénytelen értékeket kicserélni valamilyen kimenet előállítása érdekében, még akkor is, ha az még nem teljes.

Meg lehet szerezni a teljes zászlók listája a PHP dokumentációjában. A fennmaradó rész többnyire speciális opciók az adott forgatókönyvekben használt kódolás testreszabására.

A JSON bevitele az alkalmazás domainrétegébe

A bonyolult webes háttérképek nagy valószínűséggel a PHP JSON szolgáltatásait használják a HTTP válaszok kibocsátásának kontextusában. Ez valószínűleg azt jelenti, hogy a domain-réteg osztályok példányait kódolja, mint pl BlogPost.

Hívás json_encode() osztály példányával egy objektumot tartalmazó JSON karakterláncot eredményez. A PHP felsorolja a nyilvános osztály tulajdonságait, és adja hozzá kulcs / érték párként a JSON-kódolású objektumhoz.

class BlogPost {
    protected int $Id = 1;
    public string $Title = "Example";
}
 
// produces '{"Title": "Example"}'
$json = json_encode(new BlogPost());

A PHP nem tudja automatikusan elérni a védett vagy a magánvagyonokat. Ez az alapértelmezett megvalósítás ezért a legegyszerűbb osztályok kivételével mindenki számára elégtelen. Ehelyett az osztályai megvalósíthatják a JsonSerializable felület. Ez lehetővé teszi annak meghatározását, hogy miként alakulnak át a példányok JSON-vá.

JsonSerializable egyetlen módszert határoz meg, jsonSerialize(), amelyet a PHP felhív, amikor egy példányt sorosítani kell a JSON-hoz:

class BlogPost implements JsonSerializable {
    protected int $Id = 1;
    public string $Title = "Example";
 
    public function jsonSerialize() {
        return [
            "Id" => $this -> Id,
            "Title" => $this -> Title
        ];
    }
}
 
// produces '{"Id": 1, "Title": "Example"}'
$json = json_encode(new BlogPost());

Végrehajtás JsonSerializable lehetővé teszi a sorosítási folyamat irányítását. Az Ön példányai kiválaszthatják, hogy mit tegyenek ki, beleértve a védett tulajdonságokat, a dinamikusan kiszámított értékeket és a metódushívásokból visszaküldött adatokat.

Még tömböt sem kell visszaküldenie. A jsonSerializable metódus aláírás megadja a mixed return típus, így bármilyen értéket megadhat, amelyet a PHP sorosíthat a JSON-hoz. Visszaadhat egy másik objektumot, hogy a PHP rekurzívan sorosítsa.


Source link


20 Views 0 Ratings Rate it

  • Minden jog fenntartva 2019-2020. Hogyankészítsek.Hu Impresszum Adatkezelési szabályok