麻烦转换php数组到json格式有点错误

时间:2013-08-28 10:22:15

标签: php arrays json

我无法从以下php数组中获取正确的json格式

Array
(
    [0] => Array
        (
            [name] => name1
            [data] => Array
                (
                    [0] => Array
                        (
                            [5] => 2013-15-6,9
                            [6] => 2013-15-7,9
                            [7] => 2013-15-8,9
                            [8] => 2013-15-9,9
                            [9] => 2013-15-10,9
                            [10] => 2013-15-11,9
                            [11] => 2013-15-12,9
                        )

                )

        )

)

将其编码为json输出

[
    {
        "name": "name1",
        "data": [
            {
                "5": "2013-15-6,9",
                "6": "2013-15-7,9",
                "7": "2013-15-8,9",
                "8": "2013-15-9,9",
                "9": "2013-15-10,9",
                "10": "2013-15-11,9",
                "11": "2013-15-12,9"
            }
        ]
    }
]

我需要的json输出如下所示,基本上删除了数据数组中的花括号,并删除了我认为不可能的索引号。

[
    {
        "name": "name1",
        "data": [
            "2013-15-11,9",
            "2013-15-12,9"
        ]
    }
]

我已经尝试了围绕变量的array()的不同组合,通过在数据数组中添加括号让我足够接近,但我无法摆脱大括号。非常感谢一些帮助,一直在努力这几个小时。感谢

3 个答案:

答案 0 :(得分:1)

我接受了期待的json输出,并且对其进行了json_decode,这就是结果:

Array
(
    [0] => stdClass Object
        (
           [name] => name1
           [data] => Array
                (
                    [0] => 2013-15-11,9
                    [1] => 2013-15-12,9
                )

        )

)

这就是PHP结构在发送到json_encode之前的样子。

P.S。我用json_encode检查了它(改变了过程),它确切地返回了你需要的东西。

答案 1 :(得分:1)

主要思想是即使你没有直接放置索引,PHP也会从0存储它们。即只有当您的数组具有连续索引时,相应的JSON才可能没有键,从0开始。否则,索引必须 - 这是因为生成的JSON必须同时包含键和值。

见样本:

$rgData = ['a','b','c'];
var_dump(json_encode($rgData));//string(13) "["a","b","c"]"
unset($rgData[0]);//now we're going from 1 numeric key
var_dump(json_encode($rgData));//string(17) "{"1":"b","2":"c"}" 

请注意,在第二种情况下,您有索引,从1开始 - 而JSON 必须才能保留该索引。唯一的方法是传递索引。

您可以通过以下方式将数组转换为连续键:

$rgData = [5=>'a',6=>'b',7=>'c'];
$rgData = array_values($rgData);
var_dump($rgData);//array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } 

答案 2 :(得分:0)

通过使用`[0] ['data'] [0]'中值的新索引数组覆盖[0]['data'],您可以在一行中重构数据。

代码:(Demo

$array=[
            ['name'=>'name1',
             'data'=>[
                 [
                     5=>'2013-15-6,9',
                     6=>'2013-15-7,9',
                     7=>'2013-15-8,9',
                     8=>'2013-15-9,9',
                     9=>'2013-15-10,9',
                     10=>'2013-15-11,9',
                     11=>'2013-15-12,9'
                 ]
              ]
            ]
        ];
$array[0]['data']=array_values($array[0]['data'][0]);
echo json_encode($array);

输出:

[
    {
        "name":"name1",
        "data":[
            "2013-15-6,9",
            "2013-15-7,9",
            "2013-15-8,9",
            "2013-15-9,9",
            "2013-15-10,9",
            "2013-15-11,9",
            "2013-15-12,9"
        ]
    }
]