json_encode成为没有值的对象

时间:2019-02-13 15:02:39

标签: php json typing

要获得具有1个属性但值未定义的对象,我需要投入什么?

像这样:

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

提供

的JSON输出
  

“数据”:{“测试”:空}

但是我想拥有的是

  

“数据”:{“测试”}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-1)

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

第二,您正在为属性分配空值。因此,它将“ test”属性的值输出为null。

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

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