2017-02-25 42 views
2

我想使用HTML表單將數組添加到existing .json文件中。Array_push在JSON文件中給出空值

這是我的PHP:

$myFile = "data.json";  
$newArray = array(
    'name'=> $_POST['name'], 
    'date'=> $_POST['date'] 
); 

$fileTmp = file_get_contents($myFile); 
$tempArray = json_decode($fileTmp); 
array_push($tempArray, $newArray); 
$jsonData = json_encode($tempArray); 
file_put_contents($myFile, $jsonData); 

這是我的JSON:

[ 
    { 
    "name": "name 1", 
    "date": "01.02.2017" 
    }, 
    { 
    "name": "name 2", 
    "date": "05.02.2017" 
    }, 
    { 
    "name": "name 3", 
    "date": "05.03.2017" 
    } 
] 

的問題是我得到了警告

「array_push()預計參數1是array,null given in ...「

而在JSON中只有null。我的代碼有什麼問題?

+2

'$ tempArray = json_decode($ fileTmp,true); array_push($ tempArray,$ newArray);'嘗試並告訴 –

+0

這個錯誤是否也發生在提供的json文件中,或者只有在空的時候纔會發生? – aghidini

+2

@安南哦,是的,謝謝!沒有看到... aghidini問題解決了,但它與提供的json –

回答

2

添加第二個參數來json_decode()並將其設置爲true: -

$tempArray = json_decode($fileTmp,true); 
array_push($tempArray, $newArray); 
1

除了使用的json_decode在對方的回答已經說明了聯想的版本,我覺得現在的問題是你輸入JSON文件。

您應該檢查有效的內容,並創建默認的數組,如果JSON是空的:

$fileTmp = file_get_contents($myFile); 
$tempArray = json_decode($fileTmp, true); 
if (!$tempArray) { 
    $tempArray = array(); 
} 
... 
+0

其實他的json顯示的內容是有效的,但是此代碼對防止錯誤也很有用。所以+1。 –

+0

@Anant我同意他的輸入json是有效的,但我懷疑他只是在開始時才接收錯誤,那就是當輸入json是空的(或不存在)時。我認爲'json_decode'應該產生一個有效的數組,並且'false'作爲第二個參數,它應該只產生一個對象數組,但是OP錯誤是關於第一個參數(即數組)。 – aghidini

+0

當你嘗試將數組推入一個對象數組時,你也會得到這個錯誤(我認爲) –

-1

我遵守的代碼,它的工作原理。檢查data.json文件的權限。