使用流解析器

时间:2015-06-12 12:07:32

标签: php json parsing

我使用以下代码作为解析我的JSON的基础:http://soyuka.me/streaming-big-json-files-the-good-way/

它适用于我拥有的大多数JSON数据,但是一旦遇到JSON对象作为直接子对象,它就会失败。

这是我的JSON的简化版本:

[
    {
        "title": "Title",
        "child_object": {
            "title": "Child Title"
        }
    },
    {
        "title": "Title 2",
        "child_object": {
            "title": "Child Title 2"
        }
    }

]

解析后我得到了这个结果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [title] => Title
                )

            [child_object] => Array
                (
                    [title] => Child Title 2
                )

            [2] => Array
                (
                    [title] => Title 2
                )

        )

)

如果我将子对象转换为数组,解析器将生成此结果,与我在JSON数据上使用json_decode时的结果相同:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [title] => Title
                    [child_object] => Array
                        (
                            [0] => Array
                                (
                                    [child_title] => Child Title
                                )

                        )

                )

            [1] => Array
                (
                    [title] => Title 2
                    [child_object] => Array
                        (
                            [0] => Array
                                (
                                    [title] => Child Title 2
                                )

                        )

                )

        )

)

在解析JSON文件时如何将子对象放在适当位置的任何想法?

1 个答案:

答案 0 :(得分:0)

它的工作原理如下:

$str = '[
    {
        "title": "Title",
        "child_object": {
            "title": "Child Title"
        }
    },
    {
        "title": "Title 2",
        "child_object": {
            "title": "Child Title 2"
        }
    }

]';

$json = json_decode($str);

foreach($json as $data) {
    echo $data->{'title'};
    echo $data->{'child_object'}->{'title'};
}