2012-11-18 91 views
1

我的目標是遍歷JSON中的每個Item,並向每個「Item」添加一個名爲「modal」的附加關鍵字,並將該關鍵字與html包含在一起。我在下面清除了我的代碼。使用php循環遍歷JSON,並寫入它。輸出爲空

我可以爲每個'Item'添加'模態',但是值會被設置爲null,而不是我希望的html。

JSON文件:

{"Item":{ 
"thumbnail":"http://...", 
    "title": "Item title" 
}, 
"Item":{ 
    "thumbnail":"http://...", 
    "title": "Item title" 
}}   

PHP:

$json_a=json_decode($json, true); 

foreach ($json_a['Item'] as &$obj){ 
    $out = '<img src=\"' . $obj['thumbnail'] . '\">'; 
    $out .= '<span>' . $obj['title'] . '</span>'; 

    $obj['modal'] = $out; //value of $out doesn't get passed in, instead the value becomes null. 
} 

$json_a=json_encode($json_a); 
print_r($json_a); 

JSON輸出:

...{'modal': null}... 

編輯的JSON是有效的。它來自亞馬遜的產品API,我縮短了這個例子,並使其失效。

+3

你是怎麼產生這個'json'?它無效 – Baba

+0

JSON實際上來自一個API,我縮短它舉一個例子。我導致json失效,但是JSON可以有重複的鍵。 – splars

回答

3

您的JSON無效。它是具有重複鍵的對象(「項目」)。您應該使用不是數組:

[ 
    { 
     "thumbnail": "...", 
     "title": "..." 
    }, 
    { 
     "thumbnail": "...", 
     "title": "..." 
    } 
] 

然後你可以遍歷它,並添加「模式」的所有元素:

$json_a = json_decode($json, true); 

foreach ($json_a as &$obj) { 
    $out = '<img src=\"' . $obj['thumbnail'] . '\">'; 
    $out .= '<span>' . $obj['title'] . '</span>'; 

    $obj['modal'] = $out; 
} 

$json_a = json_encode($json_a); 
print_r($json_a); 
1

其簡單的json無效

{ 
    "Item": { 
     "thumbnail": "http://...", 
     "title": "Item title", 
          ^---- This should not be here 

    }, 

    "Item": { 
     ^-------------- Duplicate name 
     "thumbnail": "http://...", 
     "title": "Item title", 
          ^---- This should not be here 

    } 
} 

主要問題是如果您使用PHP代代

,則需要使用 json_encode正確生成對象或陣列