json_decode () возвращает null вместо массива - PullRequest
0 голосов
/ 03 апреля 2020

Я собираюсь вставить массив объектов в mysql через AJAX, но на стороне сервера json_decode() возвращает null

Как я могу решить эту проблему?

Это ajax коды:

let mainObj = [

    { username: 'david', password: 33456, email: 'david@gmail.com' },
    { username: 'rose', password: 3333, email: 'rose@gmail.com' },
    { username: 'adam', password: 95112, email: 'adam@gmail.com' },
    { username: 'lisa', password: 'sarlak', email: 'lisa@gmail.com' },

]



let sendMe = JSON.stringify(mainObj);



let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {

    if (this.readyState == 4 && this.status == 200) {


        document.getElementById('result').innerHTML = xhr.responseText;
    }


}

xhr.open("GET", "check.php?x=" + sendMe, true);
xhr.send();



и php коды (проверьте. php):

$obj= json_decode($_GET['x'], true);

$b= $obj[1]->username;


var_dump($b);

Он возвращает null, но мне нужно, чтобы он возвращал массив объектов, которые можно использовать в базе данных.

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Поскольку вы используете второй параметр true в $obj= json_decode($_GET['x'], true);, возвращаемое значение $obj будет массивом. Вы можете использовать:

$obj = json_decode($_GET['x']);
$b = $obj[1]->username;

или

$obj = json_decode($_GET['x'], true);
$b = $obj[1]['username'];

, чтобы получить "розу".

https://www.php.net/manual/en/function.json-decode.php

1 голос
/ 03 апреля 2020

Примерно так (другие уже написали это ..):

$json = '[{"username":"david","password":33456,"email":"david@gmail.com"},{"username":"rose","password":3333,"email":"rose@gmail.com"},{"username":"adam","password":95112,"email":"adam@gmail.com"},{"username":"lisa","password":"sarlak","email":"lisa@gmail.com"}]';

$decodedJson = json_decode($json, true);


// $b= $decodedJson[1]->username; // Wrong, you have an array, not object
// Correct
foreach($decodedJson as $single) {
    print_r($single["username"]."\n");
}

// Распечатывает:

david rose adam lisa
1 голос
/ 03 апреля 2020

Вы пытаетесь обработать массив как объект, json_decode возвращает массив, а не объект или класс stdclass ... вместо

$b= $obj[1]->username;

должно быть

$b= $obj[1]['username'];

Я предполагаю, что вы не используете какую-либо инфраструктуру, так как то, что вы сделали, должно выдать исключение, поэтому лучше включить отчеты об ошибках

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...