json_encode 进入没有价值的对象

json_encode into object with no value

我必须输入什么才能获得具有 1 属性 但未定义值的对象?

像这样:

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

给出JSON输出

"data":{"test":null}

但我想要的是

"data":{"test"}

JSON 中没有这样的语法,因此没有标准的 JSON 函数会为您提供该输出。

JSON的定义刻意简单,解释在https://json.org;引用:

JSON is built on two structures:

  • A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
  • An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence

因此,您不能拥有没有价值的钥匙;但是你可以有一个没有键的值,通过使用列表而不是对象:

{"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));

首先,当您将变量分配为对象的 属性 时,它会将该变量的值作为该 属性 的名称。因此,"$object->$data" 应该是 "$object->data" 以将 属性 名称设置为数据。

其次,您正在为 属性 分配空值。因此,它将 "test" 属性 的值输出为 null。

像这样更改代码,如果我没有猜错,您将得到正确的输出。

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