Не работает синтаксический анализ объекта json, отображаемого php-файлом - PullRequest
0 голосов
/ 13 сентября 2018

поэтому я пытаюсь создать 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);

синтаксический анализ не работает, поскольку строка json, возвращаемая из php, действительна. Что я должен сделать, чтобы это работало. Спасибо

1 Ответ

0 голосов
/ 13 сентября 2018

Это потому, что 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
        )

)

Что я думаю, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...