11

我在使用 json_encode 从数组生成 json 编码字符串时遇到问题。

有问题的数组部分如下所示

RatingDistribution (Array, 11 elements)
    0 (Array, 1 element)
        0 (String, 3 characters ) 4.5
    1 (Array, 1 element)
        1 (String, 4 characters ) 11.9
    2 (Array, 1 element)

但是在字符串中产生这个:

"RatingDistribution":[["4.5"],{"1":"11.9"},

我希望这样:

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"},

我正在做的就是这样:

$result = json_encode($array);

我做错了什么还是需要更多代码来确保 0 键存在?

干杯安迪

4

3 回答 3

21

你得到的结果应该是预期的;json_encode检测到您仅在数组中使用数字键,因此它将其转换为数组而不是 JSON 中的对象。大多数时候,这正是您想要做的。

如果由于某种原因您不这样做(为什么?),在 PHP >= 5.3 中,您可以使用该JSON_FORCE_OBJECT标志来获得所需的输出:

$result = json_encode($array, JSON_FORCE_OBJECT);
于 2013-03-08T09:39:50.247 回答
6

如果您想在 json 中使用数组,那么JSON_FORCE_OBJECT您可以简单地将数组转换为对象,而不是参数。

问题:

json_encode([0 => [1,2,3]]); // Return: [[1,2,3]]
json_encode(["0" => [1,2,3]]); // Return: [[1,2,3]]
json_encode([1 => [1,2,3]]); // Return: {"1":[1,2,3]}

不是我们所期望的:

json_encode([0 => [1,2,3]], JSON_FORCE_OBJECT); // Return: {"0":{"0":1,"1":2,"2":3}}

解决方案:

json_encode((object)[0 => [1,2,3]]); // Return: {"0":[1,2,3]}
json_encode(new \ArrayObject([0 => [1,2,3]])); // Return: {"0":[1,2,3]}
于 2016-06-02T13:53:39.433 回答
-2

Cou 可以尝试将数组键转换为字符串,例如使用 strval 或 (string)。

于 2013-03-08T09:38:51.463 回答