JSON
Utility třída Petrovo\Json\Json pro bezpečné operace s JSON - validace, kódování a dekódování.
Vrací JSON s bezpečnými defaults: bez escapování Unicode znaků, bez escapování slashes, s hbitým hlášením chyb.
Základní použití
use Petrovo\Json\Json;
// Validace
if (Json::is($string)) {
$data = Json::decode($string);
}
// Kódování
$json = Json::encode(['name' => 'Jan', 'city' => 'Praha']);
// Výstup (s header a exit)
Json::output(['status' => 'ok', 'data' => $data]);
Metody
is(string $string): bool
Ověří, je-li string validní JSON pole.
$string = '{"name":"Jan"}';
if (Json::is($string)) {
echo "Validní JSON";
}
encode(mixed $value, int $options, int $depth): string
Zakóduje hodnotu na JSON string. Defaults:
- JSON_THROW_ON_ERROR - vyhodí výjimku při chybě
- JSON_UNESCAPED_UNICODE - ponechá Unicode znaky (ě, č, ř bez \uXXXX)
- JSON_UNESCAPED_SLASHES - bez escapování / znaků
$data = ['name' => 'Jan', 'city' => 'Praha'];
// Základní kódování
$json = Json::encode($data);
// {"name":"Jan","city":"Praha"}
// S vlastními volbami
$json = Json::encode($data, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT);
// Na více řádků
$json = Json::encode($data, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
decode(string $json, bool $assoc, int $depth, int $options)
Dekóduje JSON string. Defaults:
- $assoc = true - vrací pole (associative array)
- $assoc = false - vrací objekt stdClass
- JSON_THROW_ON_ERROR - vyhodí výjimku při chybě
- JSON_BIGINT_AS_STRING - velká čísla jako stringy (zabráníš overflow)
$json = '{"name":"Jan","id":123456789012345}';
// Jako pole (default)
$data = Json::decode($json);
// Array: ['name' => 'Jan', 'id' => '123456789012345']
echo $data['name']; // Jan
// Jako objekt
$obj = Json::decode($json, false);
// stdClass: (object)['name' => 'Jan', 'id' => '123456789012345']
echo $obj->name; // Jan
output(array $array): void
Kóduje pole na JSON, nastaví header a ukončí script.
// V endpointech
$result = ['status' => 'success', 'id' => 42];
Json::output($result);
// Vytvoří response:
// Content-Type: application/json
// {"status":"success","id":42}
### data(string $urlData): array\
Parsuje JSON formát formulářových dat [{name: 'field', value: 'data'}, ...] na associative pole.
$formData = '[{"name":"email","value":"jan@example.com"},{"name":"password","value":"secret"}]';
$parsed = Json::data($formData);
// ['email' => 'jan@example.com', 'password' => 'secret']
Praktické příklady
Data endpoint s JSON výstupem
<?php
// app/DATA/Users/list.php
declare(strict_types=1);
use Petrovo\Json\Json;
use Petrovo\Database\DB;
$users = DB::results("SELECT id, name, email FROM users ORDER BY name");
// Vrátí JSON s JSON_UNESCAPED_UNICODE (čeština bez escapování)
Json::output([
'status' => 'success',
'count' => count($users),
'data' => $users
]);
Práce s objekty vs. pole
$json = '{"user":{"id":1,"name":"Jan","email":"jan@example.com"}}';
// Jako pole - přístup s []
$data = Json::decode($json);
echo $data['user']['name']; // Jan
// Jako objekt - přístup s ->
$obj = Json::decode($json, false);
echo $obj->user->name; // Jan
Chyba handling
use Petrovo\Json\Json;
use JsonException;
try {
$json = '{"incomplete": ';
$data = Json::decode($json); // Vyhodí JsonException
} catch (JsonException $e) {
echo "Chyba: " . $e->getMessage();
}
Defaults Vysvětlení
| Flag | Výchozí | Efekt |
|---|---|---|
JSON_THROW_ON_ERROR |
Ano | Chyby se vyhodí jako JsonException místo ticha |
JSON_UNESCAPED_UNICODE |
Ano | Ponechá ě, č, ř bez \uXXXX escapování |
JSON_UNESCAPED_SLASHES |
Ano | / zůstane / místo \/ |
JSON_BIGINT_AS_STRING |
Ano (decode) | Velká čísla jako stringy - zabráníš PHP integer overflow |
Poznámky
- Při
encode()se Stringy automaticky escapují (bezpečné pro XSS) - Unicode znaky nejsou escapovány - čeština je čitelná v JSON
JSON_BIGINT_AS_STRINGje důležité pro bezpečné ID deserialization- Vždy používej
decode(..., true)nebodecode(..., false)explicitně - nevěř defaults ostatních knihoven