【问题标题】:json encode return as objects instead arrayjson编码返回为对象而不是数组
【发布时间】:2013-09-23 10:33:41
【问题描述】:

我已经阅读了这个question 并没有回答我的问题。

我有一个这样的数组:

Array
(
    [0] => Array
        (
            [COM] => 10659.68
        )

    [1] => Array
        (
            [MCD] => 1219.09
        )

    [2] => Array
        (
            [MCR] => 77047.65
        )

)

当我创建一个 json_encode() 时,它会返回这个;

[{"COM":10659.68},{"MCD":1219.09},{"MCR":77047.65}]

我需要的是通过这种方式获取数据:

[["COM":10659.68],["MCD":1219.09],["MCR":77047.65]]

知道如何实现这一目标

【问题讨论】:

  • 第一个是有效的 JSON,第二个不是。
  • 你不能指望 json_encode() 返回一个无效的 JSON
  • 如果您确定每个字符串的内容格式,我认为您可以对 json_encode 输出进行正则表达式替换,您尝试了吗?
  • @lelloman 我要试试..谢谢这个想法
  • yw,@RubenSerratePardo 给出了答案,也许你不需要写它;)

标签: php arrays json


【解决方案1】:

即使这不是有效的 JSON,您也可以将 { 替换为 [

echo str_replace(array('{','}'),array('[',']'),json_encode($your_array)); 

根据内容,您可能需要使用正则表达式进行更复杂的替换。

【讨论】:

    【解决方案2】:

    更复杂的解决方案:

    function toJson($arr){
        $return = array();
        foreach($arr as $k => $v){
            if(is_array($v)) $return[] = toJson($v);
            else $return[] = sprintf('"%s":%s', $k, $v);
        }
        return sprintf('[%s]', implode(',', $return));
    }
    

    测试:

    $input = array(
        array('COM' => '10659.68'),
        array('MCD' => '1219.09'),
        array('MCR' => '77047.65'), 
    );
    var_dump(toJson($input));
    

    字符串(51) "[["COM":10659.68],["MCD":1219.09],["MCR":77047.65]]"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 2015-08-13
      • 2011-10-06
      • 2015-07-10
      • 2018-08-30
      • 2020-04-11
      相关资源
      最近更新 更多