我想将php数组转换为json字符串,以与JavaScript InfoVis Toolkit formart一起使用。

目的:
InfoVis Demo Tree

Json规范格式:
InfoVis-loading and serving JSON data

我有这个php数组:$ my_array:

Array
(
    [item_1] => Array
        (
            [id] => item_1_ID
            [name] => item_1_NAME
            [data] => item_1_DATA
            [children] => Array
                (
                    [door] => Array
                        (
                            [id] => door_ID
                            [name] => door_NAME
                            [data] => door_DATA
                            [children] => Array
                            (
                                [mozart] => Array
                                    (
                                        [id] => mozart_ID
                                        [name] => mozart_NAME
                                        [data] => mozart_DATA
                                        [children] => Array
                                            (
                                                [grass] => Array
                                                    (
                                                        [id] => grass_ID
                                                        [name] => grass_NAME
                                                        [data] => yes
                                                    )

                                                [green] => Array
                                                    (
                                                        [id] => green_ID
                                                        [name] => green_NAME
                                                        [data] => no
                                                    )

                                                [human] => Array
                                                    (
                                                        [id] => human_ID
                                                        [name] => human_NAME
                                                        [data] => human_DATA
                                                        [children] => Array
                                                            (
                                                                [blue] => Array
                                                                    (
                                                                        [id] => blue_ID
                                                                        [name] => blue_NAME
                                                                        [data] => blue_DATA
                                                                        [children] => Array
                                                                            (
                                                                                [movie] => Array
                                                                                    (
                                                                                        [id] => movie_ID
                                                                                        [name] => movie_NAME
                                                                                        [data] => yes
                                                                                    )

                                                                            )

                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

                [beat] => Array
                    (
                        [id] => beat_ID
                        [name] => beat_NAME
                        [data] => yes
                    )

                [music] => Array
                    (
                        [id] => music_ID
                        [name] => music_NAME
                        [data] => no
                    )

            )

    )

)


现在如果我json_encode($ my_array);

{
    "item_1": {
        "id": "item_1_ID",
        "name": "item_1_NAME",
        "data": "item_1_DATA",
        "children": {
            "door": {
                "id": "door_ID",
                "name": "door_NAME",
                "data": "door_DATA",
                "children": {
                    "mozart": {
                        "id": "mozart_ID",
                        "name": "mozart_NAME",
                        "data": "mozart_DATA",
                        "children": {
                            "grass": {
                                "id": "grass_ID",
                                "name": "grass_NAME",
                                "data": "yes"
                            },
                            "green": {
                                "id": "green_ID",
                                "name": "green_NAME",
                                "data": "no"
                            },
                            "human": {
                                "id": "human_ID",
                                "name": "human_NAME",
                                "data": "human_DATA",
                                "children": {
                                    "blue": {
                                        "id": "blue_ID",
                                        "name": "blue_NAME",
                                        "data": "blue_DATA",
                                        "children": {
                                            "movie": {
                                                "id": "movie_ID",
                                                "name": "movie_NAME",
                                                "data": "yes"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "beat": {
                "id": "beat_ID",
                "name": "beat_NAME",
                "data": "yes"
            },
            "music": {
                "id": "music_ID",
                "name": "music_NAME",
                "data": "no"
            }
        }
    }
}


但是对于InfoVis,当前的json输出(json_encode($ my_array))有3个问题:


没有使用[]
'children'数组具有键名
数组项具有其键名->示例:“ item_1”:{...。


让我指出问题所在,以便也许您可以提供函数来转换此json字符串:

看到这片json_encode($ my_array)输出:

{
    "item_1": {
        "id": "item_1_ID",
        "name": "item_1_NAME",
        "data": "item_1_DATA",
        "children": {
            "door": {
                "id": "door_ID",


1.问题1:

{
    "item_1": {



我们必须删除以下键:“ item_1”:


2.问题2:

"children": {
            "door": {
                "id": "door_ID",



正确的代码应为:


"children": [
            {
                "id": "door_ID",......



“门”:已删除...因为它是钥匙

“孩子”:{=>变为““孩子”:[


“孩子”的工作示例:

"children": [
    {
        "id": "grass_ID",
        "name": "grass_NAME",
        "data": "yes"
    },
    {
        "id": "green_ID",
        "name": "green_NAME",
        "data": "no"
    }
]


阐明WORKING Json InfoVis格式的完整示例:

json = {
        id: "node02",
        name: "0.2",
        children: [{
            id: "node13",
            name: "1.3",
            children: [{
                id: "node24",
                name: "2.4"
              }, {
                id: "node222",
                name: "2.22"
              }]
        }, {
            id: "node125",
            name: "1.25",
            children: [{
                id: "node226",
                name: "2.26"
            }, {
                id: "node237",
                name: "2.37"
            }, {
                id: "node258",
                name: "2.58"
            }]
        }, {
            id: "node165",
            name: "1.65",
            children: [{
                id: "node266",
                name: "2.66"
            }, {
                id: "node283",
                name: "2.83"
            }, {
                id: "node2104",
                name: "2.104"
            }, {
                id: "node2109",
                name: "2.109"
            }, {
                id: "node2125",
                name: "2.125"
            }]
        }, {
            id: "node1130",
            name: "1.130",
            children: [{
                id: "node2131",
                name: "2.131"
            }, {
                id: "node2138",
                name: "2.138"
            }]
        }]
    };


明白了吗?

希望任何人都可以帮助我..我已经为此工作了好几天!

谢谢。

最佳答案

试试这个快速转换功能

function fixit($yourArray) {
    $myArray = array();
    foreach ($yourArray as $itemKey => $itemObj) {
        $item = array();
        foreach ($itemObj as $key => $value) {
            if (strtolower($key) == 'children') {
                $item[$key] = fixit($value);
            } else {
                $item[$key] = $value;
            }
        }
        $myArray[] = $item;
    }
    return $myArray;
}

$fixed = fixit($my_array);
$json = json_encode($fixed);

关于php - PHP数组转换为Json树格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8730577/

10-11 19:50
查看更多