解析由php文件回显的json对象不起作用

时间:2018-09-13 15:50:00

标签: php json parsing

所以我想做的是创建一个php文件,该文件将从数据库中获取一些信息并返回给我一个json数组,以便我可以将其解析为另一个php文件,如下所示:

$json = file_get_contents("generatejson.php");
$data = json_decode($json, true);

已编码并回显的json是100%有效的。 如果我输入直接在文件中得到的json字符串,就像这样:

{"article_1":{"label":"myfirstvalue","oT":"myfirsttext"},"article_2":{"label":"myfirstvalue","oT":"myfirsttext"},"article_3":{"label":"myfirstvalue","oT":"myfirsttext"},"article_4":{"label":"myfirstvalue","oT":"myfirsttext"}}

解析工作正常。

但是,如果我尝试从php这样回显它:

$data = array(
    'article_1' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_2' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_3' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_4' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),

);

echo json_encode($data);

解析无效,从php返回的json字符串有效。 我应该怎么做才能使其正常工作。谢谢

1 个答案:

答案 0 :(得分:0)

这是因为file_get_contents()返回文件的内容,因此您在此处执行的操作不是运行generatejson.php,而是将代码读入变量。因此,您实际上是将$json的值设置为字符串:

$data = array(
    'article_1' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_2' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_3' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_4' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),

);

echo json_encode($data);

(这当然不是有效的JSON)。

我相信您要尝试执行的是运行代码并将输出分配给$json,在这种情况下,您将需要require()

generatejson.php

<?php

$data = array(
    'article_1' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_2' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_3' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),
    'article_4' => array(
        'label' => 'myfirstvalue',
        'oT' => 'myfirsttext',
    ),

);

return json_encode($data);

test.php

<?php

$json = require("generatejson.php");
$data = json_decode($json, true);
print_r($data);

运行此命令时,将得到输出:

Array
(
    [article_1] => Array
        (
            [label] => myfirstvalue
            [oT] => myfirsttext
        )

    [article_2] => Array
        (
            [label] => myfirstvalue
            [oT] => myfirsttext
        )

    [article_3] => Array
        (
            [label] => myfirstvalue
            [oT] => myfirsttext
        )

    [article_4] => Array
        (
            [label] => myfirstvalue
            [oT] => myfirsttext
        )

)

我想你在追求什么?