将json数据存储到php变量

问题描述

我试图将数据从json文件存储到PHP变量。但是当我尝试回显变量以供以后使用时,它将无法正常工作。

这是我的json文件

"[{\"channelId\":150342342,\"channelName\":\"example.no\",\"channelUrl\":\"http:\/\/www.example.no\"},{\"channelId\":1529564329,\"channelName\":\"example2.no\",\"channelUrl\":\"http:\/\/www.example2.no\"},{\"channelId\":1536534822,\"channelName\":\"example3.no\",\"channelUrl\":\"http:\/\/www.example3.no\"}]"

这是我的代码

<?PHP
require_once('config.PHP');

$channeljson = file_get_contents('channels.json');

$data = json_decode($channeljson,true);

$channelid = $data['channelId'];
$channelname = $data['channelName'];
$channelurl = $data['channelUrl'];

我也尝试了许多其他方式。.
任何人都有可行的提示吗?

解决方法

您的文件包含代表字符串的json,因为它以"字符开头和结尾。另一个问题是转义字符\

如果您不想更改写入json文件的例程,则可以通过更正无效的json来解决问题:

$data = json_decode(trim(stripslashes($channeljson),'"'),true); // Removes the escape and the enclosing " characters

还有一个问题:json表示对象数组(由于将true传递给第二个json_decode函数,因此是数组),并且您试图像常规数组一样访问$data

请参阅$ data内容:

array(3) {
  [0]=>
  array(3) {
    ["channelId"]=>
    int(150342342)
    ["channelName"]=>
    string(10) "example.no"
    ["channelUrl"]=>
    string(21) "http://www.example.no"
  }
  [1]=>
  array(3) {
    ["channelId"]=>
    int(1529564329)
    ["channelName"]=>
    string(11) "example2.no"
    ["channelUrl"]=>
    string(22) "http://www.example2.no"
  }
  [2]=>
  array(3) {
    ["channelId"]=>
    int(1536534822)
    ["channelName"]=>
    string(11) "example3.no"
    ["channelUrl"]=>
    string(22) "http://www.example3.no"
  }
}