【问题标题】:Prevent json_encode() from automatically generating integer keys防止 json_encode() 自动生成整数键
【发布时间】:2012-01-18 00:42:49
【问题描述】:

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

我的数组如下所示:

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

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

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

我想摆脱自动生成的整数键,并像这样:

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

有什么建议吗?

【问题讨论】:

  • [ "0": [ "0: "123", "1": "123" ] ] 有什么问题?
  • 您确定这是您拥有的所有代码并且您没有得到该输出:<?php $array = array( array( 123, 123 ) ); echo json_encode($array); ?> 吗?
  • 因为 Highcharts 似乎不喜欢生成的整数(问号够多?:)

标签: php json


【解决方案1】:

只有在将JSON_FORCE_OBJECT 标志提供给json_encode (live 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 之后缺少引号。

【讨论】:

  • 我很难相信无论如何你都可以让 json_encode 真正输出[ "0": [ "0: "123", "1": "123" ] ]。它甚至错过了大声哭泣的报价。
  • 感谢 Esailja 指出,我给出了一个简化的例子。我修改了问题以指出实际数据的问题。
  • @supertopi 我的观点即使在您编辑之后仍然有效。转载于codepad.viper-7.com
  • @supertopi 给出一个可重现的例子总是一个好主意。当前版本更好,但仍然不是有效的php。我用类似输入的解决方案更新了这个答案。
  • 感谢 phihag 和 Esaijlija 指出编码。通过您的回答,我设法追踪了问题的原因(实际上是 JavaScript JSON 解析器:)
猜你喜欢
  • 2013-06-07
  • 1970-01-01
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2021-10-27
  • 1970-01-01
  • 2015-06-01
相关资源
最近更新 更多