Php 从5.3.3之前的json_编码整数中删除引号

Php 从5.3.3之前的json_编码整数中删除引号,php,json,Php,Json,当使用json_encode时,它会自动将int键转换为字符串。例如,如果您有一个数组: $a = array(); $a[12] = 15; echo json_encode($a); {"12":15} //notice the quotes around 12 搜索SO后,解决方案是使用 json_encode($array,JSON_NUMERIC_CHECK) 但是,这仅在php>5.3.3中可用。我一直使用的生产服务器使用的是5.3.2 肯定有工作要做吗 这里的问题是,您基本上

当使用json_encode时,它会自动将int键转换为字符串。例如,如果您有一个数组:

$a = array(); 
$a[12] = 15;
echo json_encode($a);
{"12":15} //notice the quotes around 12
搜索SO后,解决方案是使用

json_encode($array,JSON_NUMERIC_CHECK)
但是,这仅在php>5.3.3中可用。我一直使用的生产服务器使用的是5.3.2


肯定有工作要做吗

这里的问题是,您基本上混合了数据结构的方法,
json_encode()
试图对如何解释数组做出最佳猜测,因为在json中,没有非零基、数字索引数组的概念

例如,如果您有一个具有连续数字序列的基于零的数字数组,
json_encode()
将其编码为以下格式的数字索引数组:

[value1, value2, ...]
{"key", value}
由于您没有基于零的数组,因此您的数据结构将被解释为对象结构,并提供以下格式的字符串键(JSON中对象的唯一可用键类型):

[value1, value2, ...]
{"key", value}

因此,似乎您需要决定在数组中真正要表示什么。您是只需要基于数字的数组,还是需要对象编码。

它不会删除对象键周围的引号。这在JSON序列化(仅在JSOL中)中无效。只需实现自己的JSON编码器。这并不难,因为JSON是一种非常原始的格式。保留引号,并在必要时解析/转换它:@mario-你是对的。JSON规范要求密钥为字符串。谢谢。是的,我不知道JSON要求密钥是字符串。