Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将XML格式化为JSON_Php_Xml_Json - Fatal编程技术网

使用PHP将XML格式化为JSON

使用PHP将XML格式化为JSON,php,xml,json,Php,Xml,Json,我试图从XML提要的属性获取JSON提要输出。我可以从XML中获取数据,但是,我无法将其正确格式化。错误似乎与json_encode没有向输出日期添加大括号有关。这是我目前掌握的代码: <?php $url = 'http://cloud.tfl.gov.uk/TrackerNet/LineStatus'; if(!$xml = simplexml_load_file($url)) { die("No xml for you"); }

我试图从XML提要的属性获取JSON提要输出。我可以从XML中获取数据,但是,我无法将其正确格式化。错误似乎与
json_encode
没有向输出日期添加大括号有关。这是我目前掌握的代码:

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

?>
LineStatus作为$line)
{
echo$line->line['Name'];
echo$行->状态['Description'];
}
标题('Content-Type:application/json');
打印(json编码($linestatus));
?>

回声
s把一切都搞砸了。我认为您打算附加到
linestatus
,它根据您的代码保持为空

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

您还需要使用
echo
而不是
print\r
来实际发出JSON。

您将
$linestatus
声明为一个数组,然后在最终编码并尝试输出它之前,不要在其中放入任何内容。当然,它不会像预期的那样工作!相反,您应该使用以下值填充它:

$linestatus = array();

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

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

问题是您没有将名称和描述存储到数组中

试试这个:

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

试试这个:不要对JSON字符串使用
print\r()
;普通的旧
打印
echo
是您所需要的。此外,我没有看到您的代码在任何地方实际使用
$linestatus
。也许您想在
foreach()
循环中使用它?这样会分割行数据,而不是将行数据分组。@cillosis:请参阅演示。:)我很确定名字和描述是相关联的。这意味着它们一起组成了一行,因此应该用
$linestatus[]=$line->line
语句组合在一起。这是最接近我想要实现的。但是,当我想调用输出的JSON时,例如,当我尝试使用JQuery“value.name”进行访问时,我会变得未定义。我还注意到,它输出的JSON的站名标识符为“0”,有办法停止吗?