Json_decode - Manual - PHP

update page now
  • Downloads
  • Documentation
  • Get Involved
  • Help
  • PHP 8.5
Search docs Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Supported Protocols and Wrappers Security Introduction General considerations Installed as CGI binary Installed as an Apache module Session Security Filesystem Security Database Security Error Reporting User Submitted Data Hiding PHP Keeping Current Features HTTP authentication with PHP Cookies Sessions Handling file uploads Using remote files Connection handling Persistent Database Connections Command line usage Garbage Collection DTrace Dynamic Tracing Function Reference Affecting PHP's Behaviour Audio Formats Manipulation Authentication Services Command Line Specific Extensions Compression and Archive Extensions Cryptography Extensions Database Extensions Date and Time Related Extensions File System Related Extensions Human Language and Character Encoding Support Image Processing and Generation Mail Related Extensions Mathematical Extensions Non-Text MIME Output Process Control Extensions Other Basic Extensions Other Services Search Engine Extensions Server Specific Extensions Session Extensions Text Processing Variable and Type Related Extensions Web Services Windows Only Extensions XML Manipulation GUI Extensions Keyboard Shortcuts? This help j Next menu item k Previous menu item g p Previous man page g n Next man page G Scroll to bottom g g Scroll to top g h Goto homepage g s Goto search(current page) / Focus search box json_encode » « Fonctions JSON
  • Préface
  • Référence des fonctions
  • Autres extensions basiques
  • JSON
  • Fonctions JSON
Change language: English German Spanish French Italian Japanese Brazilian Portuguese Russian Turkish Ukrainian Chinese (Simplified) Other json_decode

(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)

json_decodeDécode une chaîne JSON

Description

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

Récupère une chaîne encodée JSON et la convertit en une valeur de PHP.

Liste de paramètres

json

La chaîne de caractères json à décoder.

Cette fonction ne fonctionne qu'avec des chaînes encodées en UTF-8.

Note:

PHP implémente un sur-ensemble de JSON tel que spécifié dans la » RFC 7159 originale.

associative

Lorsque ce paramètre vaut true, les objets JSON seront retournés comme tableaux associatifs ; lorsque ce paramètre vaut false, les objets JSON seront retournés comme des objets. Lorsque ce paramètre vaut null, les objets JSON seront retournés comme des tableaux associatifs ou des objets, suivant si la constante JSON_OBJECT_AS_ARRAY a été définie dans le paramètre flags.

depth

Profondeur d'imbrication maximale de la structure en cours de décodage. La valeur doit être supérieure à 0, et inférieure ou égale à 2147483647.

flags

Masque de bit composé de JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR. Le comportement de ces constantes est décrit sur la page des constantes JSON.

Valeurs de retour

Retourne la valeur décodée dans le paramètre json dans le type PHP approprié. Les valeurs sans guillemets true, false et null sont retournées respectivement comme true, false et null. null est retourné si le paramètre json n'a pu être décodé ou si les données encodées sont plus profondes que la limite d'imbrication fournie.

Erreurs / Exceptions

Si depth est en dehors de la plage autorisée, une ValueError est lancée à partir de PHP 8.0.0, alors qu'auparavant, une erreur de niveau E_WARNING était lancée.

Historique

Version Description
7.3.0 Le flags JSON_THROW_ON_ERROR a été ajouté.
7.2.0 Le paramètre associative est désormais nullable.
7.2.0 Les flags JSON_INVALID_UTF8_IGNORE, et JSON_INVALID_UTF8_SUBSTITUTE ont été ajoutés.
7.1.0 Une clé JSON vide ("") peut être décodée dans la propriété d'objet vide au lieu d'utiliser une clé avec la valeur _empty_.

Exemples

Exemple #1 Exemple avec json_decode()

<?php$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';var_dump(json_decode($json));var_dump(json_decode($json, true));?>

L'exemple ci-dessus va afficher :

object(stdClass)#1 (5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) } array(5) { ["a"] => int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) }

Exemple #2 Accès à des propriétés d'objet invalides

Accéder à des éléments d'un objet qui contiennent des caractères non permis par la convention de nommage de PHP (c.-à-d. le trait d'union) peut être effectué en encapsulant le nom de l'élément avec des crochets et des apostrophes.

<?php$json = '{"foo-bar": 12345}';$obj = json_decode($json);print $obj->{'foo-bar'}; // 12345?>

Exemple #3 Erreurs habituelles lors de l'utilisation de la fonction json_decode()

<?php// Les chaînes suivantes sont valides en JavaScript mais pas en JSON// Le nom et la valeur doivent être entourés de guillemets doubles.// Les guillemets simples ne sont pas valides.$bad_json = "{ 'bar': 'baz' }";json_decode($bad_json); // null// Le nom doit être entouré de guillemets doubles.$bad_json = '{ bar: "baz" }';json_decode($bad_json); // null// La virgule de fin n'est pas autorisée.$bad_json = '{ bar: "baz", }';json_decode($bad_json); // null?>

Exemple #4 Erreurs avec le paramètre depth

<?php// Encodage des données avec un niveau d'imbrication maximal de 4 (array -> array -> array -> string)$json = json_encode( array( 1 => array( 'English' => array( 'One', 'January' ), 'French' => array( 'Une', 'Janvier' ) ) ));// Affichage des erreurs pour des niveau d'imbrication différentes.var_dump(json_decode($json, true, 4));echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;var_dump(json_decode($json, true, 3));echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;?>

L'exemple ci-dessus va afficher :

array(1) { [1]=> array(2) { ["English"]=> array(2) { [0]=> string(3) "One" [1]=> string(7) "January" } ["French"]=> array(2) { [0]=> string(3) "Une" [1]=> string(7) "Janvier" } } } Last error: No error NULL Last error: Maximum stack depth exceeded

Exemple #5 Exemple avec json_decode() et de gros entiers

<?php$json = '{"number": 12345678901234567890}';var_dump(json_decode($json));var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));?>

L'exemple ci-dessus va afficher :

object(stdClass)#1 (1) { ["number"]=> float(1.2345678901235E+19) } object(stdClass)#1 (1) { ["number"]=> string(20) "12345678901234567890" }

Notes

Note:

La spécification JSON ne fait pas partie de Javascript mais d'un sous-ensemble de Javascript.

Note:

Si une erreur survient lors du décodage, la fonction json_last_error() pourra être utilisée pour déterminer la nature exacte de l'erreur.

Voir aussi

  • json_encode() - Retourne la représentation JSON d'une valeur
  • json_last_error() - Retourne la dernière erreur JSON
  • json_last_error_msg() - Retourne le message de la dernière erreur survenue lors de l'appel à la fonction json_validate(), json_encode() ou json_decode()

Found A Problem?

Learn How To Improve This Page • Submit a Pull Request • Report a Bug +add a note

User Contributed Notes 6 notes

up down 25 Lennart Hengstmengel4 years ago JSON can be decoded to PHP arrays by using the $associative = true option. Be wary that associative arrays in PHP can be a "list" or "object" when converted to/from JSON, depending on the keys (of absence of them). You would expect that recoding and re-encoding will always yield the same JSON string, but take this example: $json = '{"0": "No", "1": "Yes"}'; $array = json_decode($json, true); // decode as associative hash print json_encode($array) . PHP_EOL; This will output a different JSON string than the original: ["No","Yes"] The object has turned into an array! Similarly, a array that doesn't have consecutive zero based numerical indexes, will be encoded to a JSON object instead of a list. $array = [ 'first', 'second', 'third', ]; print json_encode($array) . PHP_EOL; // remove the second element unset($array[1]); print json_encode($array) . PHP_EOL; The output will be: ["first","second","third"] {"0":"first","2":"third"} The array has turned into an object! In other words, decoding/encoding to/from PHP arrays is not always symmetrical, or might not always return what you expect! On the other hand, decoding/encoding from/to stdClass objects (the default) is always symmetrical. Arrays may be somewhat easier to work with/transform than objects. But especially if you need to decode, and re-encode json, it might be prudent to decode to objects and not arrays. If you want to enforce an array to encode to a JSON list (all array keys will be discarded), use: json_encode(array_values($array)); If you want to enforce an array to encode to a JSON object, use: json_encode((object)$array); See also: https://www.php.net/manual/en/function.array-is-list.php up down 3 cubefox at web dot NOSPAMPLEASE dot de5 years ago Warning: As the section "return values" mentions, the return value NULL is ambiguos. To repeat, it can mean three things: * The input string had the value "null" * There was an error while parsing the input data * The encoded data was deeper than the recursion limit To distinguish these cases, json_last_error() can be used. up down 1 greaties at ghvernuft dot nl3 years ago To load an object with data in json format: (bugfixed my previous comment) <?php function loadJSON($Obj, $json) { $dcod = json_decode($json); $prop = get_object_vars ( $dcod ); foreach($prop as $key => $lock) { if(property_exists ( $Obj , $key )) { if(is_object($dcod->$key)) { loadJSON($Obj->$key, json_encode($dcod->$key)); } else { $Obj->$key = $dcod->$key; } } } return $Obj; } ?> Tested with: <?php class Name { public $first; public $last; public function fullname() { return $this->first . " " . $this->last; } } $json = '{"first":"John","last":"Smith"}'; $infull = loadJSON((new Name), $json); echo $infull->fullname(); up down 0 jdpsaratoga at gmail dot com16 days ago If you json_encode() an associative array it is encoded as an object, not an array. For example echo json_encode( ["a"=>42, "b"=>99] ); will result in: {"a":42,"b":99} which is the JSON representation of an object, not an array. The encode has lost the information that this was an array originally. So this means if you decode the above it will refuse to accept it as an argument for any array functions. You can cast it to an array or set the second parameter in the decode, but that assumes you were the one that encoded it and knew it was supposed to be an array. up down 0 Alien4264 years ago Browsers don't choke on integers _starting_ with BigInt (64 bits), but before that (53 bits). The introduction of BigInt to modern browsers doesn't help much, when JSON handling functions do not support it. So I am trying to remedy that. My approach is to handle the decoded array before re-encoding it to a string: <?php function fix_large_int(&$value) { if (is_int($value) && $value > 9007199254740991) $value = strval($value); } $json_str = '{"id":[1234567890123456789,12345678901234567890]}'; $json_arr = json_decode($json_str, flags: JSON_BIGINT_AS_STRING | JSON_OBJECT_AS_ARRAY); echo(json_encode($json_arr)); // {"id":[1234567890123456789,"12345678901234567890"]} (BigInt is already converted to a string here) array_walk_recursive($json_arr, 'fix_large_int'); echo(json_encode($json_arr)); // {"id":["1234567890123456789","12345678901234567890"]} ?> up down -5 Anonymous1 year ago When JSON_OBJECT_AS_ARRAY is true, "json_decode($json)" is the same as "json_decode($json, false)" and return object actually. <?php $php_constants = (get_defined_constants(true)); printf($php_constants['json']['JSON_OBJECT_AS_ARRAY'] . PHP_EOL); $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; $data = json_decode($json); printf(is_array($data) . PHP_EOL);//false var_dump($data); $data = json_decode($json, false); printf(is_array($data) . PHP_EOL);//false var_dump($data); $data = json_decode($json, true); printf(is_array($data) . PHP_EOL);//true var_dump($data); ?> +add a note
  • Fonctions JSON
    • json_​decode
    • json_​encode
    • json_​last_​error
    • json_​last_​error_​msg
    • json_​validate
To Top ↑ and ↓ to navigate • Enter to select • Esc to close • / to open Press Enter without selection to search using Google

Tag » Add Element Json Php