json_encode в объект без значения - PullRequest
0 голосов
/ 13 февраля 2019

Что мне нужно вставить, чтобы получить объект с 1 свойством, но с неопределенным значением?

Примерно так:

$data = 'test';
$object = new stdClass;
$object->$data = null;
var_dump(json_encode($postData));

дает вывод JSON

"data": {"test": null}

но мне хотелось бы получить

"data": {"test"}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Во-первых, когда вы присваиваете переменную как свойство объекта, она принимает значение этой переменной как имя этого свойства.Таким образом, «$ object -> $ data» должно быть «$ object-> data», чтобы установить имя свойства в качестве данных.

Во-вторых, вы присваиваете нулевое значение для свойства.Таким образом, он выводит значение свойства «test» как ноль.

Измените код следующим образом, и если я не угадаю, вы получите правильный вывод.

$data = 'test';
$object = new stdClass;
$object->data = $data;
var_dump(json_encode($object));
0 голосов
/ 13 февраля 2019

В JSON такого синтаксиса нет, поэтому никакая стандартная функция JSON не выдаст вам такой вывод.

Определение JSON преднамеренно просто и объяснено в https://json.org;, чтобы процитировать:

JSON построен на двух структурах:

  • Коллекция пар имя / значение.На разных языках это реализовано как объект, запись, структура, словарь, хеш-таблица, список ключей или ассоциативный массив.
  • Упорядоченный список значений.В большинстве языков это реализовано как массив, вектор, список или последовательность

Таким образом, вы не можете иметь ключ без значения;но вы можете иметь значение без ключа, используя список вместо объекта:

{"data": ["test"]}

В PHP это будет создано следующим образом:

$data = 'test';
$postData = new stdClass;
$postData->data = [ $data ];
var_dump(json_encode($postData));

Или используямассив, а не stdClass объект:

$data = 'test';
$postData = [];
$postData['data'] = [ $data ];
var_dump(json_encode($postData));
...