动态JSON输出

时间:2016-01-28 19:57:43

标签: php arrays json

对于我正在制作的工具,它输出JSON并使用PHP对其进行解码,然后通过相同的脚本对其进行回显。在所述JSON中,一些数组是静态的并且一些变化,例如作业id。

例如,对于请求,您可能会获得一个数组,例如

{ "rank": "Supreme Damage Dealer", "player_id": Name, "name": "Name",

在这种情况下,rank,player_id和name都是静态的,唯一改变的是输出。

在某些数组中,例如

{ "crimes": { "4769740": { "crime_id": 3, "crime_name": "Bomb threat", "participants": "1616976,1848006,1829524", "time_started": 1453948278, "time_completed": 1454207478, }, "4769739": { "crime_id": 4, "crime_name": "Planned robbery", "participants": "612285,1603035,579999,1858750,1875355", "time_started": 1453948245, "time_completed": 1454293845, },

诸如4769740和4769739之类的数字会发生变化,因此我无法按名称/等级输出,因为与名称/等级不同,标题会发生变化。

我需要将它输出到页面上,为什么我的名字和排名相同。 目前,名称和等级的输出如下:

$jsonurl = "http://api.torn.com/user/$id?selections=basic&key=$key";
$json = file_get_contents($jsonurl);
$decodedString = json_decode($json, true);
//var_dump($decodedString);
echo "Level: ".$decodedString["level"]."</br>";
echo "Name: ".$decodedString["name"]."</br>";
然而,对于这些罪行,我不能这样做。我如何输出犯罪数据?

使用代码, $jsonurl = "http://api.torn.com/faction/7709?selections=crimes&key=key"; $json = file_get_contents($jsonurl); $decodedString = json_decode($json); foreach($decodedString as $key => $value){ //At this step $key is 4769740 //$value is an array of the values inside echo "Level: ".$value["crime_name"]."</br>"; }

我收到错误消息致命错误:不能在第19行的/var/www/html/torn/Scripts/Faction/crimes.php中使用stdClass类型的对象作为数组

1 个答案:

答案 0 :(得分:0)

$ decodingString将作为json的对象返回。在这种情况下,它只有一个元素,犯罪是另一个拥有犯罪对象的对象。这些犯罪对象中的每一个都包含您正在寻找的数据。

foreach($decodedString as $key => $value){
    //At this step $key is the string "crimes" and the value is the object of objects inside
    foreach($value as $number => $crime){
        //Now $crime is an object of values for each crime
        echo "Level: ".$crime->crime_name."</br>";
    }
}

输出:
炸弹威胁
计划抢劫

如果您知道犯罪是唯一的对象,您可能会跳过第一个foreach。 print_r()是您调试的朋友。

foreach($decodedString->crimes as $number => $crime){
    //$crime is the object with the data you're looking for. 
    echo "Level: ".$crime->crime_name."</br>";
}