2016-01-28 3 views
0

Для инструмента, который я сейчас создаю, он выводит JSON, и я декодирую его с помощью PHP, а затем повторяю его через тот же скрипт. В упомянутом JSON некоторые массивы являются статическими и некоторые изменения, такие как идентификатор задания.Dynamic JSON Output

Например, для запроса, вы можете получить массив, такой как

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

в этом случае, звание, player_id, и имя все статические и единственное, что изменения есть выход.

В некоторых массивах, таких как

{ "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>"; }

Я получаю Фатальная ошибка сообщение об ошибке: Не удается использовать объект типа StdClass как массив в /var/www/html/torn/Scripts/Faction/crimes.php в строке 19

+0

Вы пробовали заявление foreach? foreach ($ decodedString ["crime"] AS $ key => $ value) {echo $ decodedString ["crime"] [$ key];} – danielml01

+0

'$ decodedString = json_decode ($ json);' должен быть '$ decodedString = json_decode ($ json, true); '. –

ответ

0

$ decodedString будет возвращен как объект для вашего 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>"; 
    } 
} 

Would выход:
бомба угроза
Планируемое ограбление

Вы могли потенциально пропустить первый Еогеасп, если вы знаете, преступления является единственным объектом там. 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>"; 
} 
+0

Используя ваш код, я получаю эту ошибку: Неустранимая ошибка: нельзя использовать объект типа stdClass как массив в /var/www/html/torn/Scripts/Faction/crimes.php в строке 19 Обратитесь к нижней части OP, чтобы увидеть используемый код , – 1826888

+0

Извините, я должен был знать, что json_decode преобразует это в объект вместо массива. Вместо этого используйте $ value-> crime_name. Если вы выполняете значение print_r() на $, это даст вам лучшее представление о том, с чем вы работаете. Я исправлю решение выше. Вам также понадобится еще один цикл. – cdanik