我正在尝试将一些JSON解码为php数组。这是代码摘录:
$getfile="{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}";
$arr = json_decode($getfile, true);
$arr['day3'] = $selecter;
echo(print_r($arr));
唯一返回的是“1”。我已经检查过JSONLint并且它是有效的json,所以我想知道为什么json_decode失败了。我还尝试在添加day3键之前检查数组是什么,我仍然返回'1'。任何帮助表示赞赏!
实际代码:
$getfile = "";
$getfile = file_get_contents($file);
if ($getfile == "") {
writeLog("Error reading file.");
}
writeLog("getfile is " . $getfile);
writeLog("Decoding JSON data");
$arr = json_decode($getfile, true);
writeLog("Decoded raw: " . print_r($arr));
writeLog("Editing raw data. Adding data for day " . $day);
$arr['day3'] = $selecter;
writeLog(print_r($arr));
$newfile = json_enconde($arr);
writeLog($newfile);
if (file_put_contents($file, $newfile)) {
writeLog("Wrote file to " . $file);
echo $newfile;
} else {
writeLog("Error writting file");
}
这些是$ file(它是文本文件)的内容
{"fname":"Bob","lname":"Thomas","cascade":"bthomas","loc":"res","place":"home 2"}
答案 0 :(得分:1)
我们仍然不知道你文件中有什么。但是如果:
"{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}"
然后无关的外部双引号将拧紧JSON ,json_decode
将返回NULL。使用json_last_error()
查找。也可能是UTF-8 BOM或其他东西......
无论如何,1
是print_r
的结果。 print_r直接输出,你不需要echo。另外用于调试而是使用var_dump()
更具体地说,您希望返回print_r
输出(而不是布尔成功结果1
),然后将其写入日志。
所以使用:
writeLog(print_r($arr, TRUE));
注意TRUE
参数。
答案 1 :(得分:0)
首先,使用单引号。这将导致解析错误
$getfile= '{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}';
我假设你已经宣布了$ selecter并且已经分配了一些值。
从echo(print_r($arr))
删除回音您不需要回声。 print_r也会输出。如果使用echo,它将在数组末尾显示1。
工作代码:
$getfile = '{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}';
$arr = json_decode($getfile, true);
$selecter = 'foobar';
$arr['day3'] = $selecter;
print_r($arr);
希望这有帮助。
答案 2 :(得分:0)
我这样做时遇到了这个问题:
if ($arr = json_decode($getfile, true)) {
$arr['day3'] = $selecter;
echo(print_r($arr));
}
将其解码为if是解决方案。