0

我正在尝试将一些 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"}
4

3 回答 3

1

我们仍然不知道您的文件中有什么。但是,如果:

"{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}"

然后多余的外部双引号将破坏 JSONjson_decode并将返回 NULL。用于json_last_error()找出。也可能是 UTF-8 BOM 或其他东西......

无论如何,1是 的结果print_r。print_r 直接输出,不需要回显。也用于调试而不是使用var_dump()


更具体地说,您希望print_r返回输出(而不是布尔成功结果1),然后将其写入日志。

所以使用:

      writeLog(print_r($arr, TRUE));

注意TRUE参数。

于 2012-07-11T23:43:43.150 回答
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);

希望这可以帮助。

于 2012-07-11T23:55:01.927 回答
0

这样做时我遇到了这个问题:

if ($arr = json_decode($getfile, true)) {
    $arr['day3'] = $selecter;
    echo(print_r($arr));
}

在 if 之外对其进行解码是解决方案。

于 2016-05-15T22:26:52.023 回答