是否有某种JS​​ON_FORCE_ARRAY而不是JSON_FORCE_OBJECT?

时间:2016-05-22 11:45:58

标签: php arrays json

JSON_FORCE_OBJECT是一个被标记的被传递给PHP中着名的json_encode函数。

正如文件所说:

  

JSON_FORCE_OBJECT(integer)输出对象而不是数组   当使用非关联数组时。特别有用的时候   输出的接收者期待一个对象,并且该数组是空的。   自PHP 5.3.0起可用。

我找不到强制对开的旗帜。有什么编程方式吗?

2 个答案:

答案 0 :(得分:1)

将对象编码为非关联数组是一种有损操作。对象属性名称/数组键丢失。这就是json_encode()没有提供将对象编码为非关联数组的方法的原因。

从PHP 5.4开始,您的类可以实现JsonSerializable接口。此接口(jsonSerialize())声明的方法由json_encode()调用,它返回需要放入json_encode()生成的文本表示中的对象数据。

如果您只想编码对象属性的值(没有属性名称),您可以像这样实现它:

class MyClass implements JsonSerializable
{
    public function jsonSerialize()
    {
        return array_values((array)$this);
    }
}

请注意,您无法从json_decode()的输出中恢复对象(使用json_encode()),因为在编码期间丢失了某些信息(属性的名称)

答案 1 :(得分:0)

最简单的选择是确保PHP中有一个简单的非关联数组。

$simple_array = array_values($associative_array);
$json = json_encode($simple_array);
unset($simple_array);