#php #json
#php #json
Вопрос:
JSON:
{
"success": 1,
"result": {
"total": [
{
"standing_place": "1",
"standing_place_type": "Promotion - NBA (Play Offs)",
"standing_team": "Toronto Raptors",
"standing_P": "82",
"standing_W": "59",
"standing_WO": "0",
"standing_L": "23",
"standing_LO": "0",
"standing_F": "9156",
"standing_A": "8518",
"standing_PCT": "0.720",
"team_key": "51",
"league_key": "787",
"league_season": "2017/2018",
"league_round": "Eastern Conference",
"standing_updated": "2018-05-28 17:22:59"
},
{
"standing_place": "3",
"standing_place_type": "Promotion - NBA (Play Offs)",
"standing_team": "Philadelphia 76ers",
"standing_P": "82",
"standing_W": "52",
"standing_WO": "0",
"standing_L": "30",
"standing_LO": "0",
"standing_F": "9004",
"standing_A": "8635",
"standing_PCT": "0.634",
"team_key": "56",
"league_key": "787",
"league_season": "2017/2018",
"league_round": "Eastern Conference",
"standing_updated": "2018-05-28 17:23:00"
}
]
}
PHP:
$APIkey='XXXXXXX';
$leagueId = 787;
$curl_options = array(
CURLOPT_URL => "https://allsportsapi.com/api/basketball/?met=Leaguesamp;APIkey=$APIkeyamp;leagueId=$leagueId",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_CONNECTTIMEOUT => 5
);
$curl = curl_init();
curl_setopt_array( $curl, $curl_options );
$result = curl_exec( $curl );
$result = (array) json_decode($result);
var_dump($result);
$result = json_decode($result);
foreach($result as $mydata)
{ foreach($result->result as $myresult)
{
foreach($myresult->total as $total)
{
$standing_place_type = $total->standing_place_type;
}
}
}
Этот код Json является исходным кодом из all sports API, с которым я работал с некоторыми другими API, но не нашел с этим интересным работать. Я перепробовал все известные мне средства для решения этой проблемы, но все методы оказались неудачными с пустым результатом. пожалуйста, если вы работали с API раньше, пожалуйста, помогите или если у вас есть идея, как я могу решить эту проблему, пожалуйста, помогите
Ответ №1:
То, что у вас есть, в основном есть, вам просто нужно проверить, существует ли total
индекс, прежде чем пытаться его использовать:
foreach($result as $mydata) {
if(!empty($mydata->total)){
foreach($mydata->total as $total ){
echo $total->standing_place_type . PHP_EOL;
}
}
}
Комментарии:
1. у меня это не работает. total не пуст, когда я получаю результат var_dump, он отображает содержимое
2. @davidlemchidove Нажмите на ссылку, результат можно увидеть. Может быть, у вас другая структура JSON?
3. вот как выглядит структура array(2) { [«success»]=> int(1) [«result»]=> array(395) { [0]=> object(stdClass)#4856 (4) { [«league_key»]=> string(3) «734» [«имя_лиги»]=> string(7) «1. Лига»
4. Пожалуйста, отредактируйте вопрос с вашим фактическим JSON в виде строки, и я обновлю ответ .. или вы можете экстраполировать ответ на ваш фактический код.
Ответ №2:
Прежде всего, если вы больше знакомы с PHP, чем с нотацией JSON, попробуйте print_r
результат json_decode
, чтобы увидеть, как преобразуется структура. Это должно быть так:
$decodedJson = json_decode($json);
print_r($decodedJson);
// Result
stdClass Object
(
[success] => 1
[result] => stdClass Object
(
[total] => Array
(
[0] => stdClass Object
...
Вы видите? Это объект с результирующим объектом, с общим объектом с массивом объектов.
Теперь, зная, что вы можете получить доступ к общедоступным свойствам объектов PHP, подобным этому, $myObject->my_property
и массивам, с которыми вы можете выполнять итерации foreach
, как в вашем примере, вы могли бы перемещаться по этой структуре в PHP следующим образом:
// Check if the object contains the expected structure
if ($decodedJson amp;amp; isset($decodedJson->result) amp;amp; isset($decodedJson->result->total)) {
// Iterate over Total Array
foreach ($decodedJson->result->total as $total) {
// Print values
echo "Standing_Place: {$total->standing_place} / Standing_Place_Type: {$total->standing_place_type}." . PHP_EOL;
}
}
Obs: В опубликованном вами JSON в конце отсутствует фигурная скобка. Вы можете проверить json на этом сайте.