PHP.mk документација

json_decode

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.json-decode.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.json-decode.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
json_decode

Референца за `function.json-decode.php` со подобрена типографија и навигација.

function.json-decode.php

json_decode

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

json_decodeДекодира JSON стринг

= NULL

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

Зема JSON кодиран стринг и го претвора во PHP вредност.

Параметри

json

На json string се декодира.

Оваа функција работи само со UTF-8 кодирани стрингови.

Забелешка:

PHP имплементира надсет на JSON како што е наведено во оригиналниот Bitmask кој се состои од.

associative

Кога true, JSON објектите ќе бидат вратени како асоцијативни array; кога false, JSON објектите ќе бидат вратени како objectс. Кога null, JSON објектите ќе бидат вратени како асоцијативни arrayили objectс во зависност од тоа дали JSON_OBJECT_AS_ARRAY е поставено во flags.

depth

Максимална длабочина на вгнездување на структурата што се декодира. Вредноста мора да биде поголема од 0, и помала или еднаква на 2147483647.

flags

Битмаска од JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR. Однесувањето на овие константи е опишано на JSON константи page.

Вратени вредности

Ја враќа вредноста кодирана во json како соодветен PHP тип. Вредности без наводници true, false and null се враќаат како true, false and null respectively. null се враќа ако json не може да се декодира или ако кодираните податоци се подлабоки од границата на вгнездување.

Errors/Exceptions

Враќа depth е надвор од дозволениот опсег, а ValueError се фрла од PHP 8.0.0, додека претходно, грешка од ниво E_WARNING беше кренат.

Дневник на промени

Верзија = NULL
7.3.0 JSON_THROW_ON_ERROR flags беше додадено.
7.2.0 associative сега е null.
7.2.0 JSON_INVALID_UTF8_IGNOREПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во JSON_INVALID_UTF8_SUBSTITUTE flags беа додадени.
7.1.0 Празен JSON клуч ("") може да се кодира во празната ставка на објектот наместо да се користи клуч со вредност _empty_.

Примери

Пример #1 json_decode() examples

<?php
$json
= '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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)
}

Пример #2 Пристап до невалидни ставки на објектот

Пристапот до елементи во објект што содржат знаци што не се дозволени според конвенцијата за именување на PHP (на пр. цртичка) може да се постигне со ставање на името на елементот во загради и апостроф.

<?php

$json
= '{"foo-bar": 12345}';

$obj = json_decode($json);
print
$obj->{'foo-bar'}; // 12345

?>

Пример #3 Вообичаени грешки при користење json_decode()

<?php

// the following strings are valid JavaScript but not valid JSON

// the name and value must be enclosed in double quotes
// single quotes are not valid
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null

// the name must be enclosed in double quotes
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null

// trailing commas are not allowed
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null

?>

Пример #4 depth errors

<?php
// Encode some data with a maximum depth of 4 (array -> array -> array -> string)
$json = json_encode(
array(
1 => array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);

// Show the errors for different depths.
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;
?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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

Генератор json_decode() на големи цели броеви

<?php
$json
= '{"number": 12345678901234567890}';

var_dump(json_decode($json));
var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));

?>

Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред

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

Белешки

Забелешка:

JSON спецификацијата не е JavaScript, туку подмножество на JavaScript.

Забелешка:

Во случај на неуспех при декодирање, json_last_error() може да се користи за да се утврди точната природа на грешката.

Види Исто така

  • json_encode() - Враќа JSON претстава на вредност
  • json_last_error() - Враќа последна грешка што се случила
  • json_last_error_msg() - Враќа низа за грешка од последниот повик на json_validate(), json_encode() или json_decode()

Белешки од корисници 6 белешки

Ленарт Хенгстменгел
пред 4 години
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
cubefox на web dot NOSPAMPLEASE dot de
пред 5 години
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.
greaties на ghvernuft dot nl
3 години пред
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();
jdpsaratoga на gmail dot com
1 месец пред
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.
Alien426
пред 4 години
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"]}
?>
Анонимен
пред 1 година
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);
?>
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.