【问题标题】:Formatting XML in to JSON with PHP使用 PHP 将 XML 格式化为 JSON
【发布时间】:2013-10-15 15:45:50
【问题描述】:

我正在尝试从 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));

?>

【问题讨论】:

  • 不要使用 print_r() 作为 JSON 字符串;普通的 printecho 是您所需要的。
  • 另外,我没有看到您的代码实际上在任何地方使用$linestatus。也许您打算在 foreach() 循环中使用它?

标签: php xml json


【解决方案1】:

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

试试这个:

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

Demo!

【讨论】:

  • 这将拆分行数据而不是对其进行分组。
  • @cilosis:查看演示。 :)
  • 我很确定名称和描述是相关联的。这意味着它们一起构成了一行,因此应该与 $linestatus[] = $line-&gt;Line 语句组合在一起。
  • 这是最接近我想要实现的目标。但是,当我想调用输出的 JSON 时,例如,当我尝试使用 JQuery 'value.name' 访问时,我会变得不确定。
  • 我还注意到它输出了带有站名标识符的 JSON 为“0”,有没有办法阻止这种情况?
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    $linestatus = array();
    
    foreach ($xml->LineStatus as $line)
    {
        $linestatus[] = $line->Line;
    }
    
    header('Content-Type: application/json');
    print_r(json_encode($linestatus));
    

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多