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));
我必须输入什么才能获得具有 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));