PHP json_encode问题与数组0键

and*_*odd 10 php arrays json key

我在使用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)
Run Code Online (Sandbox Code Playgroud)

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

"RatingDistribution":[["4.5"],{"1":"11.9"},
Run Code Online (Sandbox Code Playgroud)

我希望这个:

"RatingDistribution":[{"0":"4.5"},{"1":"11.9"},
Run Code Online (Sandbox Code Playgroud)

我所做的就是:

$result = json_encode($array);
Run Code Online (Sandbox Code Playgroud)

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

干杯安迪

Jon*_*Jon 18

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

如果由于某种原因你没有(为什么?),在PHP> = 5.3中你可以使用该JSON_FORCE_OBJECT标志来获得你想要的输出:

$result = json_encode($array, JSON_FORCE_OBJECT);
Run Code Online (Sandbox Code Playgroud)


dmv*_*slv 5

如果你想在你的 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]}
Run Code Online (Sandbox Code Playgroud)

不是我们所期望的:

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

解决方案:

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]}
Run Code Online (Sandbox Code Playgroud)


Joh*_*hni -2

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