2013-08-19 65 views
2

我有具有每JSON對象的直接圖像鏈接和文件夾名稱簡單的JSON文件:追加陣列數據作爲對象來JSON文件

[ 
     { 
       "image": "http://placehold.it/350x150", 
       "folder": "Small" 
     }, 
     { 
       "image": "http://placehold.it/450x250", 
       "folder": "Medium" 
     }, 
     { 
       "image": "http://placehold.it/550x350", 
       "folder": "Medium" 
     } 
] 

我想這兩個值從後追加,但結果是一個不變的json文件。下面是PHP代碼瓦特/評論:

$directLink = $_POST['txtDirectLink']; 
$category = $_POST['selectCategoriesImages']; 
$util->addToJsonImageList($directLink, $category); 

//decodes the json image list, merges to the decoded array a new image, then encodes back to a json file 
function addToJsonImageList($link, $category) { 
    $file = file_get_contents('./images_list.json', true); 
    $data = json_decode($file); 
    unset($file); 

    $newImage = array('image' => $link, 'folder' => $category); 
    //$newImage['image'] = $link; 
    //$newImage['folder'] = $category; 
    $result = array_merge((array)$data, (array)$newImage); 

    json_encode($result); 
    file_put_contents('./images_list.json', $result); 
    unset($result); 
} 

的邏輯是,它應該是簡單的json_decode該文件作爲一個陣列,所述新的數組,併到的是,然後將結果進行編碼並投入相同的文件。我一直無法捕捉任何類型的錯誤。

+0

嘗試'$ data = json_decode($ file,true);' – bansi

+0

我以爲我已經這樣做了,以確保它作爲一個數組返回,但我偶然在文件中添加了bool參數。但仍然沒有改變。 – benbob

+0

file_put_contents('./images_list。json',json_encode($ result)); –

回答

5
$data = json_decode($file, true); 
//When TRUE, returned objects will be converted into associative arrays. 
unset($file); 

$newImage = array('image' => $link, 'folder' => $category); 
//$newImage['image'] = $link; 
//$newImage['folder'] = $category; 
$result = array_merge($data, $newImage); 
//don't need to cast 

參考PHP json_decode手冊

編輯下面的代碼工作(測試)

function addToJsonImageList($link, $category) { 
    $file = file_get_contents('./images_list.json', true); 
    $data = json_decode($file,true); 
    unset($file); 
    //you need to add new data as next index of data. 
    $data[] = array('image' => $link, 'folder' => $category); 
    $result=json_encode($data); 
    file_put_contents('./images_list.json', $result); 
    unset($result); 
} 

編輯2增加了很多錯誤報告和調試。請讓我知道以下的輸出。下面的代碼沒有經過測試(只是在這裏輸入)。如果發現任何語法錯誤,請修復。這裏遲到,只能明天我的時間,但可以回覆。

<?php 
//display all errors and warnings 
error_reporting(-1); 
addToJsonImageList('test link', 'test category'); 

function addToJsonImageList($link, $category) { 
    $file = file_get_contents('./images_list.json', true); 
    if ($file===false)die('unable to read file'); 
    $data = json_decode($file,true); 
    if ($data ===NULL)die('Unable to decode'); 
    unset($file); 
    echo "data before\n"; 
    var_dump ($data); 
    //you need to add new data as next index of data. 
    $data[] = array('image' => $link, 'folder' => $category); 
    echo "data after\n"; 
    var_dump ($data); 
    $result=json_encode($data); 
    if (file_put_contents('./images_list.json', $result) === false){ 
     die('unable to write file'); 
    } 
    unset($result); 
} 
?> 
+0

我現在收到「array_merge:argument#1不是數組」錯誤。 – benbob

+0

我試過編輯後的代碼,它仍然沒有更改我的json文件。是否有錯誤檢查我可以用來查看問題的位置? json文件與此代碼位於同一目錄中。 – benbob

+0

真棒,與您的錯誤檢查我能夠得到它的工作。有一件事我注意到了json文件的不同之處: 任何http://字符串都變成了http:\/\ /(編碼是這樣做的嗎?)。感謝您的幫助和時間,我會看看逃生斜線 – benbob

0

你可以做的是解碼json然後合併它們。

$data = json_decode(file_get_contents(./images_list.json)); 

$result = array_merge((array)$data, (array)$newImage); 

,然後就輸出json_encode

file_put_contents('./images_list.json', json_encode($result, JSON_FORCE_OBJECT)); 
+0

我在file_put_content裏面添加了json_encode(result),現在我收到錯誤:「array_merge():參數#1不是數組」,即使我將$ data設置爲數組而不是對象,通過添加可選的true – benbob

0

你的問題是與代碼

以下行
json_encode($result); 
file_put_contents('./images_list.json', $result); 

你沒有捕捉json_encode讓你寫一個array到文件的結果。

你需要調整的代碼如下所示

$result = json_encode($result); 
file_put_contents('./images_list.json', $result); 
+0

我應該更新我的答案,因爲我已經解決了這個問題。感謝您的洞察力。 – benbob

1

比方說你有一個名爲(playerJson)

{ 

"Players": 
    [ 
    {"Name":"Arun","Arm":"Gun","num":"1"}, 
    {"Name":"sssv","Arm":"Arc","num":"2"}, 
    {"Name":"Surya","Arm":"Bomb","num":"3"}, 
    {"Name":"sssv","Arm":"Fire","num":"4"} 

    ] 
} 

現在我們必須在PHP這樣做以.json文件(myPhpFile .php)是:(我想你是從表單加載你的數據)

<?php 

$json = file_get_contents('playerJson.json'); 
$json_data = json_decode($json,true); 

$newar = array(
      'Name'=>$_POST['nameField'] , 
      'Arm' =>$_POST['armField'], 
      'Num' =>$_POST['numField'] 
); 
//saving data in Players object... 
array_push($json_data['Players'], $newar); 

$json = json_encode($json_data); 

file_put_contents('playerJson.json', $json); 

?> 

就這樣!你在「玩家」對象中有一個新行。 但是,如果您想添加一個新對象,請避免array_push函數中的$ json_data之後的[Players]。