PHP Json String解码

时间:2017-04-27 14:34:10

标签: php json string

这是我的第一个问题,我长期处理这个问题,但我不知道它在哪里。

我想从文件中读取一个Json字符串,(但确实如此)但是当我使用" json_decode "不起作用,我试图将文件内容复制到一个变量中,并且效果很好,我不明白为什么,可以有人帮忙。

谢谢!

这里有代码:

<HTML>
<p>-JSON STRING (From File)-</p>
<?PHP
    $jsonStr = "";
    $jsonStr =$jsonStr . file_get_contents("./Config.json");
    echo "Json String: " . $jsonStr;

?>
<p>-JSON DATA-</p>
<?PHP
    $jsonDec = json_decode($jsonStr, true);
    $name = $jsonDec['config'][0]['nombre'];
    echo "Json data: " . $name;

    echo "</br>--------------------------------------------------------------------------------";
?>

<p>-JSON STRING (From var)-</p>
<?PHP
    $jsonStr = '{ "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] } ';
    echo "Json String: " . $jsonStr;
?>
<p>-JSON DATA-</p>
<?PHP
    $jsonDec = json_decode($jsonStr, true);
    $name = $jsonDec['config'][0]['name'];

    echo "Json data: " .  $name;
?>

以下是我得到的结果:

-JSON STRING (From File)-

Json String:{&#34; config&#34; :[{&#34; name&#34; :&#34; Eduvi&#34;,&#34;链接&#34; :&#34; LINKURL&#34;},{&#34; name&#34; :&#34; Eduvi&#34;,&#34;链接&#34; :&#34; LINKURL&#34;},{&#34; name&#34; :&#34; Eduvi&#34;,&#34;链接&#34; :&#34; LINKURL&#34;}]}

-JSON DATA- Json数据:

-JSON STRING(来自var) - Json String:{&#34; config&#34; :[{&#34; name&#34; :&#34; Eduvi&#34;,&#34;链接&#34; :&#34; LINKURL&#34;},{&#34; name&#34; :&#34; Eduvi&#34;,&#34;链接&#34; :&#34; LINKURL&#34;},{&#34; name&#34; :&#34; Eduvi&#34;,&#34;链接&#34; :&#34; LINKURL&#34;}]}

-JSON DATA- Json数据:Eduvi

3 个答案:

答案 0 :(得分:0)

  • Undefined index: nombre in /tmp/test.php on line 10 =&gt;意味着你调用一个不存在的索引,正如你自己在数据中看到的那样;如果是,它将显示包含的值

输入文件site.txt

{ "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] }

php code'test.php':

<?php

    echo("\n-JSON STRING (From File)-\n");
    $jsonStr = "";
    $jsonStr = trim( file_get_contents("./site.txt") ); // fix 
    echo "Json String: " . $jsonStr."\n";

    echo("\n-JSON DATA-\n");
    $jsonDec = json_decode($jsonStr, true);
    $name = $jsonDec['config'][0]['nombre']; //index nombre does not exist, if it is 'name', then it works
    echo "Json data: " . $name;

    echo "\n--------------------------------------------------------------------------------\n";

    echo("\n-JSON STRING (From var)-\n");
    $jsonStr = '{ "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] } ';
    echo "Json String: " . $jsonStr."\n";
    echo("\n-JSON DATA-\n");
    $jsonDec = json_decode($jsonStr, true);
    $name = $jsonDec['config'][0]['name'];

    echo "Json data: " .  $name."\n";
?>

使用php test.php

在cli上运行它
-JSON STRING (From File)-
Json String: { "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] }

-JSON DATA-
PHP Notice:  Undefined index: nombre in /tmp/test.php on line 10
Json data:
--------------------------------------------------------------------------------

-JSON STRING (From var)-
Json String: { "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] }

-JSON DATA-
Json data: Eduvi
修复'name'后输出

-JSON STRING (From File)-
Json String: { "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] }

-JSON DATA-
Json data: Eduvi
--------------------------------------------------------------------------------

-JSON STRING (From var)-
Json String: { "config" :[ {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"}, {"name" : "Eduvi", "link" : "LINKURL"} ] }

-JSON DATA-
Json data: Eduvi
  • 也尝试使用与此处相同的输入进行测试;)

答案 1 :(得分:0)

如果您的Config.json是以UTF-8(with BOM)编码的,则json_decode函数将失败并返回NULL。

您可以通过修剪$ jsonStr字符串中的BOM来解决此问题:

$jsonStr = trim(file_get_contents("config.json"), "\xEF\xBB\xBF");

除此之外,您还没有解决现有价值(请参阅vv01f&#39> 的答案)

祝你好运!

答案 2 :(得分:0)

我正在测试这个例子,完全正常,基本文件是ob.php

$jsonStr = "";
$jsonStr =$jsonStr . file_get_contents("myfile.json");
echo "Json String one : " . $jsonStr;


$jsonDec = json_decode($jsonStr, true);
$name = $jsonDec['config'][0]['name'];
echo "Json data: " . $name;

echo "</br>-------------------------";

之后添加json文件myfile.json

{
    "config": [{
        "name": "Eduvi",
        "link": "LINKURL"
    }, {
        "name": "Eduvi",
        "link": "LINKURL"
    }, {
        "name": "Eduvi",
        "link": "LINKURL"
    }]
}

它显示name的值,即数组中的第一个对象