防止json_encode()自动生成整数键

时间:2012-01-18 00:42:49

标签: php json

我正在尝试使用json_encode()将二维PHP数组编码为JSON,我遇到了问题:

我的数组看起来像这样:

$array = array( array( 1325368800, 6898 ) );

当我使用json_encode()将其编码为JSON时,输出如下所示:

  'data' : [ 
          '0' : [  '0' : '1325368800',      '1' : '6898' ]
           ]

我想摆脱自动生成的整数键,并将其设为:

'data':  [ [ '1325368800', '6898' ] ]

任何提示?

1 个答案:

答案 0 :(得分:2)

只有将JSON_FORCE_OBJECT标记提供给json_encodelive demo),才会发生这种情况:

echo json_encode(array(array( 123, 123 )));
// outputs [[123,123]]

echo json_encode(array(array( 123, 123 )), JSON_FORCE_OBJECT);
// outputs {"0":{"0":123,"1":123}}

确保未设置json_encode的第二个参数,或将其设置为ORing JSON_*常量生成的值。

但是,如果数据是关联数组,则可以使用array_values来获取JSON数组而不是JSON对象:

$assocData = array('0' => array('0' => 123, '1'=>123));
$arrayData = array_map('array_values', array_values($assocData));
echo json_encode($arrayData);

顺便说一句,您引用的JSON输出无效,因为它对对象使用方括号([]),并且在"0之后错过了引号。