2012-07-11 109 views
0

我想解碼一些JSON到一個PHP數組。這裏是代碼摘錄:json_decode返回數組1

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

這些都是$文件的內容(這是一個文本文件)

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

你能發佈你的實際代碼嗎?我希望解析錯誤而不是'1'。 – mario 2012-07-11 23:34:46

+0

@mario。剛剛添加! – Vikram 2012-07-11 23:38:16

+0

嘗試在您的JSON字符串的末尾放置單引號。 – wdm 2012-07-11 23:38:17

回答

0

我們仍然不知道什麼是您的文件。但是,如果:

"{"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直接輸出,你不需要回聲。同時進行調試,而使用var_dump()


更具體地說,你會希望print_r輸出返回(而不是布爾成功結果1),然後寫的日誌。

所以使用:

 writeLog(print_r($arr, TRUE)); 

通知的TRUE參數。

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

希望這有助於。

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

解碼,如果是液外面: