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"}"

次に、無関係な外側の二重引用符はJSONをねじ込み、 NULLjson_decodeを返します。調べるために使用json_last_error()します。UTF-8BOMまたは他の何かである可能性もあります...

とにかく、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 に答える