通过JSON文件从rome2rio API中提取数据

时间:2014-10-16 17:10:47

标签: php html json

我正在尝试从rome2rio(API http://www.rome2rio.com/documentation/search)中提取数据。它们使我有可能从其服务器上的JSON或XML文件中获取详细信息。 JSON输出如下所示:

{
  "agencies":
    [{
    "code":       "SWISSRAILWAYS",
    "name":       "Swiss Railways (SBB/CFF/FFS)",
    "url":        "http://www.sbb.ch"
    "iconPath":   "/logos/trains/ch.png",
    "iconSize":   "27,23",
    "iconOffset": "0,0"
    ]},
  "routes":
    [{
    "name":     "Train",
    "distance": 95.92,
    "duration": 56,
    "stops":
      [{
      "name": "Bern",
      "pos":  "46.94926,7.43883",
      "kind": "station"
      },{
      "name": "Zürich HB",
      "pos":  "47.37819,8.54019",
      "kind": "station"
      }],
    "segments":
      [{
      "kind":     "train",
      "subkind":     "train",
      "isMajor":  1,
      "distance": 95.92,
      "duration": 56,
      "sName":    "Bern",
      "sPos":     "46.94938,7.43927",
      "tName":    "Zürich HB",
      "tPos":     "47.37819,8.54019",
      "path":     "{wp}Gu{kl@wb@uVo|AqiDyoBhUibDeiDc`AsmDaxBqk@wwA...",
      "indicativePrice":{
        "price":45,
        "currency":"USD",
        "isFreeTransfer":0,
        "nativePrice":40,
        "nativeCurrency":"CHF"
      },
      "itineraries":
        [{
        "legs":
          [{
          "url": "http://fahrplan.sbb.ch/bin/query.exe/en...",
          "hops":
            [{
            "distance":  95.92,
            "duration":  56,
            "sName":     "Bern",
            "sPos":      "46.94938,7.43927",
            "tName":     "Zürich HB",
            "tPos":      "47.37819,8.54019",
            "frequency": 400,
            "indicativePrice":{
              "price":45,
              "currency":"USD",
              "isFreeTransfer":0,
              "nativePrice":40,
              "nativeCurrency":"CHF"
            },
            "lines":
              [{
              "name":      "",
              "vehicle":   "train",
              "agency":    "SWISSRAILWAYS",
              "frequency": 400,
              "duration":  57,
              }]
            }]
          }]
        }]
      }]
    }]
  }]
}

我想通过PHP提取'segments'数据并使用以下代码:

<?php 
$url = 'http://free.rome2rio.com/api/1.2/json/Search?key=vwiC3pvW&oName=Germany&dName=Yemen';
$content = file_get_contents($url);
$json = json_decode($content, true);
?>

<html>
<head>
<style>
section {height:500px; width:1000px; color:red;}
</style>


</head>
<body> 
<section>

<?php

	foreach($json as $i){ 
			echo "$i[segments]</br>"; 
			}
 ?>
 
</section>
</body>
<

当我执行代码时,我得到了这个结果:

Notice: Undefined index: segments in C:\xampp\htdocs\worldmap\test.php on line 21


Notice: Undefined index: segments in C:\xampp\htdocs\worldmap\test.php on line 21


Notice: Undefined index: segments in C:\xampp\htdocs\worldmap\test.php on line 21


Notice: Undefined index: segments in C:\xampp\htdocs\worldmap\test.php on line 21


Notice: Undefined index: segments in C:\xampp\htdocs\worldmap\test.php on line 21


Notice: Undefined index: segments in C:\xampp\htdocs\worldmap\test.php on line 21

提前感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:1)

我不知道&#34;段&#34;索引在哪里..但你可以试试这个:

<?php foreach($json as $segment => $i):?>
    <h3><?php echo $segment ?></h3>
    <?php foreach($i as $index => $value): ?>
    <p><?php echo $index.": ".$value ?></p>
    <?php endforeach; ?>
<?php endforeach; ?>

或者你可以使用Itinaretor ......我认为这是一个更好的解决方案..

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($json));
foreach($iterator as $key => $value) {
    echo "<p>$key => $value</p>";
}

参考:PHP foreach() with arrays within arrays?