PHP Codifica di una stringa JSON


Esempio

La funzione json_encode convertirà un array PHP (o, dal momento che PHP 5.4, un oggetto che implementa l'interfaccia JsonSerializable ) in una stringa con codifica JSON. Restituisce una stringa con codifica JSON in caso di successo o FALSE in caso di errore.

$array = [
    'name' => 'Jeff',
    'age' => 20,
    'active' => true,
    'colors' => ['red', 'blue'],
    'values' => [0=>'foo', 3=>'bar'],
];

Durante la codifica, i tipi di dati PHP string, integer e boolean vengono convertiti nel loro equivalente JSON. Gli array associativi sono codificati come oggetti JSON e, quando vengono chiamati con argomenti predefiniti, gli array indicizzati sono codificati come array JSON. (A meno che le chiavi dell'array non siano una sequenza numerica continua a partire da 0, nel qual caso l'array sarà codificato come oggetto JSON.)

echo json_encode($array);

Produzione:

{"name":"Jeff","age":20,"active":true,"colors":["red","blue"],"values":{"0":"foo","3":"bar"}}

argomenti

Dal PHP 5.3, il secondo argomento di json_encode è una maschera di bit che può essere uno o più dei seguenti.

Come con qualsiasi maschera di bit, possono essere combinati con l'operatore OR binario | .

PHP 5.x 5.3

JSON_FORCE_OBJECT

Forza la creazione di un oggetto invece di un array

$array = ['Joel', 23, true, ['red', 'blue']];
echo json_encode($array);
echo json_encode($array, JSON_FORCE_OBJECT);

Produzione:

["Joel",23,true,["red","blue"]]
{"0":"Joel","1":23,"2":true,"3":{"0":"red","1":"blue"}}

JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_HEX_QUOT

Assicura le seguenti conversioni durante la codifica:

Costante Ingresso Produzione
JSON_HEX_TAG < \u003C
JSON_HEX_TAG > \u003E
JSON_HEX_AMP & \u0026
JSON_HEX_APOS ' \u0027
JSON_HEX_QUOT " \u0022
$array = ["tag"=>"<>", "amp"=>"&", "apos"=>"'", "quot"=>"\""];
echo json_encode($array);
echo json_encode($array, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);

Produzione:

{"tag":"<>","amp":"&","apos":"'","quot":"\""}
{"tag":"\u003C\u003E","amp":"\u0026","apos":"\u0027","quot":"\u0022"}
PHP 5.x 5.3

JSON_NUMERIC_CHECK

Garantisce che le stringhe numeriche vengano convertite in numeri interi.

$array = ['23452', 23452];
echo json_encode($array);
echo json_encode($array, JSON_NUMERIC_CHECK);

Produzione:

["23452",23452]    
[23452,23452]
PHP 5.x 5.4

JSON_PRETTY_PRINT

Rende facilmente leggibile il JSON

$array = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
echo json_encode($array);
echo json_encode($array, JSON_PRETTY_PRINT);

Produzione:

{"a":1,"b":2,"c":3,"d":4}
{
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4
}

JSON_UNESCAPED_SLASHES

Include barre senza escape / avanti nell'output

$array = ['filename' => 'example.txt', 'path' => '/full/path/to/file/'];
echo json_encode($array);
echo json_encode($array, JSON_UNESCAPED_SLASHES);

Produzione:

{"filename":"example.txt","path":"\/full\/path\/to\/file"}
{"filename":"example.txt","path":"/full/path/to/file"}

JSON_UNESCAPED_UNICODE

Include i caratteri con codifica UTF8 nell'output anziché le stringhe con codifica \u

$blues = ["english"=>"blue", "norwegian"=>"blå", "german"=>"blau"];
echo json_encode($blues);
echo json_encode($blues, JSON_UNESCAPED_UNICODE);

Produzione:

{"english":"blue","norwegian":"bl\u00e5","german":"blau"}
{"english":"blue","norwegian":"blå","german":"blau"}
PHP 5.x 5.5

JSON_PARTIAL_OUTPUT_ON_ERROR

Permette alla codifica di continuare se si incontrano alcuni valori non convertibili.

$fp = fopen("foo.txt", "r");
$array = ["file"=>$fp, "name"=>"foo.txt"];
echo json_encode($array); // no output
echo json_encode($array, JSON_PARTIAL_OUTPUT_ON_ERROR);

Produzione:

{"file":null,"name":"foo.txt"}
PHP 5.x 5.6

JSON_PRESERVE_ZERO_FRACTION

Garantisce che i float siano sempre codificati come float.

$array = [5.0, 5.5];
echo json_encode($array);
echo json_encode($array, JSON_PRESERVE_ZERO_FRACTION);

Produzione:

[5,5.5]
[5.0,5.5]
PHP 7.x 7.1

JSON_UNESCAPED_LINE_TERMINATORS

Se utilizzato con JSON_UNESCAPED_UNICODE , ripristina il comportamento delle versioni precedenti di PHP e non sfugge ai caratteri U + 2028 LINE SEPARATOR e U + 2029 PARAGRAPH SEPARATOR. Sebbene validi in JSON, questi caratteri non sono validi in JavaScript, quindi il comportamento predefinito di JSON_UNESCAPED_UNICODE stato modificato nella versione 7.1.

$array = ["line"=>"\xe2\x80\xa8", "paragraph"=>"\xe2\x80\xa9"];
echo json_encode($array, JSON_UNESCAPED_UNICODE);
echo json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS);

Produzione:

{"line":"\u2028","paragraph":"\u2029"}
{"line":"
","paragraph":"
"}