2013-10-15 52 views
-1

我正在嘗試從XML提要的屬性獲取JSON提要輸出。我可以從XML中獲取數據,但是,我無法使其正確格式化。錯誤似乎與json_encode沒有添加花括號到輸出日期。這是我到目前爲止的代碼:將XML格式化爲使用PHP的JSON

<?php 

    $url = 'http://cloud.tfl.gov.uk/TrackerNet/LineStatus'; 

    if(!$xml = simplexml_load_file($url)) 
    { 
     die("No xml for you"); 
    } 

    $linestatus = array(); 

    foreach ($xml->LineStatus as $line) 
    { 
     echo $line->Line['Name']; 
     echo $line->Status['Description']; 
    } 

    header('Content-Type: application/json'); 
    print_r(json_encode($linestatus)); 

?> 
+0

試試這個:http://stackoverflow.com/questions/8830599/php-convert-xml-to-json?rq=1 – angelobochini

+0

不使用'print_r()'作爲JSON字符串;普通的舊式'print'或'echo'就是你需要的。 – Spudley

+0

也,我沒有看到你的代碼實際上在任何地方使用'$ linestatus'。也許你打算在'foreach()'循環中對它做些什麼? – Spudley

回答

0

問題是,你沒有將名稱和描述存儲到數組中。

試試這個:

foreach ($xml->LineStatus as $line) 
{ 
    $linestatus[] = array('name' => $line->Line['Name']); 
    $linestatus[] = array('description' => $line->Line['Description']); 
} 

Demo!

+0

這將拆分線數據而不是分組。 –

+0

@cillosis:查看演示。 :) –

+0

我很確定名稱和描述是關聯的。這意味着它們組成一條線,因此應該用'$ linestatus [] = $ line-> Line'語句組合在一起。 –

0

echo s的擰一切。我想你打算追加到linestatus,它仍然是你的代碼爲空。

$linestatus[] = array(
    "name" => $line->Line['Name'], 
    "description" => $line->Status['Description'] 
); 

你還需要使用echo,而不是print_r實際發出JSON。

0

你聲明$linestatus是一個數組,然後在最後編碼它並嘗試輸出它之前,不會放入任何東西。當然,它不會按預期工作!相反,你應該使用值填充它:

$linestatus = array(); 

foreach ($xml->LineStatus as $line) 
{ 
    $linestatus[] = $line->Line; 
} 

header('Content-Type: application/json'); 
print_r(json_encode($linestatus));