Как мне получить это значение json standing_place для моей базы данных в php из объекта json ниже

#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;
        }
    }
}
  

https://3v4l.org/TS5Ae

Комментарии:

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 на этом сайте.