Mesuti
@Mesuti

Как получить json значение по ключу?

Привет!
Как из json {param1: "value"} в php получить только value у конкретного param1?
Чтобы потом можно оперировать в php, например так
if (param1 == 'value') {
// функции
}


Проблема, как ни пытаюсь взять значение param1, постоянно возвращается null.

Без перезагрузки на js отправляется json в file.php

const request = new XMLHttpRequest(); 

        const url = "file.php";   // обработчик
        const params = "param1=value";  // "параметр=значение" для отправки 

        request.responseType = "json";  // отправляем как json
        request.open("POST", url);  // метод отправки POST 
        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  // ставим заголовок окна 

        request.send(params);  // отправляем переменную с "param=value"

        request.addEventListener("readystatechange", () => {  // событие при отправке данных в обработчик
            if (request.readyState === 4 && request.status === 200) {  // если успешная отправка
                console.log(request.response); // ВОЗВРАЩАЕТ {exit: "exit"}
              }
        });



А это сам обработчик file.php

<?php
$data_json = json_encode($_POST, JSON_OBJECT_AS_ARRAY);  // получаем json из POST и обозначаем его как массив
echo $data_json;  // возвращает {param1: "value"}

// НЕ РАБОТАЕТ:
json_decode($_POST);  // json_decode возвращает null
echo $data_json->{'param'};   // Запрос по ключу из массива возвращает null
echo gettype($data_json); // Запрос типа переменной выдает null 
var_dump($data_json);  // Запрос ошибки выдает null
?>

  • Вопрос задан
  • 970 просмотров
Решения вопроса 2
alekseyHunter
@alekseyHunter
Android developer
В $_POST содержится ассоциативный массив, доступный по ключу. Вы отправили объект json - он содержится теперь в этом массиве, каждому ключу из объекта соответствует аналогичный ключ в $_POST.
Обращайтесь так:
$param = $_POST["param"];

А чтобы декодировать json, нужно скормить строку с ним. А вы декодируете массив $_POST.

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';  //вот это может декодировать функция

$data_json = json_encode($_POST); 
json_decode($data_json);
Ответ написан
makssof
@makssof
Web-разработчик
$json = '{"param1": "value"}';
var_dump( json_decode($json)->param1  );    // string(5) "value"
var_dump( json_decode($json, true)['param1']  );    // string(5) "value"
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ar2rsoft
PHP-developer
Так $_POST это массив, а json_decode вроде как ждет строку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы