简体   繁体   中英

json_decode returning an array of 1

I am trying to decode some JSON into a php array. Here's the code excerpt:

$getfile="{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}";
$arr = json_decode($getfile, true);
$arr['day3'] = $selecter;
echo(print_r($arr));

The only thing that gets returned is '1'. I've checked JSONLint and it is valid json, so I'm wondering why json_decode is failing. I also tried checking what the array is before adding the day3 key to it, and I still return a '1'. Any help is appreciated!

Actual code:

$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");
    }

These are the contents of $file (it's a text file)

{"fname":"Bob","lname":"Thomas","cascade":"bthomas","loc":"res","place":"home 2"}

We still don't know what's in your file. However if:

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

Then the extraneous outer double quotes will screw the JSON , and json_decode will return NULL. Use json_last_error() to find out. Might also be a UTF-8 BOM or something else ...

Anyway, the 1 is the result from print_r . print_r outputs directly, you don't need the echo. Also for debugging rather use var_dump()


More specifically you would want the print_r output returned (instead of the boolean success result 1 ) and then write that to the log.

So use:

      writeLog(print_r($arr, TRUE));

Notice the TRUE parameter.

First, use a single quote. That will cause a parse error

$getfile= '{"fname":"bob","lname":"thomas","cascade":"bthomas","loc":"res","place":"home 2"}';

I assume you have already declared $selecter and it has been assigned to some value.

Remove echo from echo(print_r($arr)) You don't need echo. print_r will also output. If you use echo, it will display 1 at the end of array.

The working code:

$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);

Hope this helps.

I had this problem when doing it like this:

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

Decoding it outside of if was the solution.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM