如何编辑我的代码,以便它将打印JSON字符串的所有块,而不仅仅是第一个?

时间:2014-03-08 11:49:04

标签: php json

我试图从同一页面获取一些源文件的内容并将它们保存到MySQL中。某些文件具有与其他文件不同的属性名称,因此更“自动”的代码将有所帮助。我粘贴在示例源文件下面,但您可以在下面看到我的代码。

示例源文件:

{
Trims: [
{
   "model_id":"15155"
  ,"model_make_id":"ford"
  ,"model_name":"Taurus"
  ,"model_trim":""
  ,"model_year":"2000"
  ,...(all available model fields are included)
 },
{
   "model_id":"15073"
  ,"model_make_id":"ford"
  ,"model_name":"Taurus"
  ,"model_trim":"3.0"
  ,"model_year":"2000"
  ,...(all available model fields are included)
  },
  {etc...}
}]}

预期输出:

我想只打印一次属性名称,因为所有源文件的编号都相同。

model_id
model_make_id
model_name
model_trim
model_year
...and so on....

------
and afterwards all the values

15155
ford
Taurus

2000
...and so on...

15073
ford
Taurus
3.0
2000
...and so on...

首次尝试解决方法: http://codepad.viper-7.com/dZDxoo

我可以打印属性名称和值。但有问题。我只需要一次属性名称,这没关系。但它只打印VALUES的第一个块,而不打印其他VALUES。如果我可以打印所有内容,这是我的解决方案。我正在使用的不同源文件中的属性名称数量不同,因此这有助于我自动获取名称。

<?php
$json = file_get_contents('http://www.carqueryapi.com/api/0.3/?cmd=getTrims&year=2007&make=mini');
$vres = array('{"Trims":' , '}]}');
$allakse = array("" , "}]");
$json = str_replace($vres, $allakse, $json);
$cars = json_decode($json, true);

foreach ($cars[0] as $key => $car)
{
  echo "$key", "\n";
}

echo"<br><br>";

foreach ($cars[0] as $key => $car)
{
  echo "$car", "\n";
}

第二次尝试解决方法: http://codepad.viper-7.com/7bcDUx

因为源文件具有不同数量的属性,所以具有固定的for each - echo loop将无法帮助我。这很重要,因为我想从每个源文件中自动获取属性名称。另外,我无法打印属性名称,只能打印值。

<?php
$json = file_get_contents('http://www.carqueryapi.com/api/0.3/?cmd=getTrims&year=2007&make=mini');
$cars = json_decode($json, true);
foreach($cars['Trims'] as $car){
    echo $car['model_body'].'<br/>';
}

我该如何回应所有块中的所有值,而不是仅从第一个块回显?

1 个答案:

答案 0 :(得分:1)

当你有解码的json时,你可以操作数组并打印任何项目的标题(让我们选择第一项),然后打印数组中所有项目的值:

<?php
function PrintFieldNames($item)
{
    foreach($item as $key => $value) 
    {
        echo($key . "<br/>");
    }
}

function PrintFieldValues($item)
{
    foreach($item as $key => $value) 
    {
        echo($value . "<br/>");
    }
}

$json = file_get_contents('http://www.carqueryapi.com/api/0.3/?cmd=getTrims&year=2007&make=mini');
$cars = json_decode($json, true);
$cars = $cars['Trims'];

PrintFieldNames($cars[0]);
foreach($cars as $car)
{
    PrintFieldValues($car);
}
?>