Как исправить ошибку wp_remote_get () // получить значение из массива? - PullRequest
0 голосов
/ 13 июня 2019

Я хочу получить каждый Bank_name на WordPress из массива при вызове внешнего API.Я использовал wp_remote_get().При выполнении цикла foreach с массивом я получил эту ошибку:

В foreach () указан неверный аргумент.

Для отладки ошибки я попытался повторитьпервый Bank_name путем предоставления индекса.Я сделал то же самое двумя способами, но один работает, а другой нет.Единственное отличие состоит в том, что один способ использует wp_remote_get(), а другой использует ответ в виде массива без вызова API.

Откуда исходит ошибка?

Это не работает:

    $request = wp_remote_get( 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo' );
    if( is_wp_error( $request ) ) {
        return false; 
    }

    $body = wp_remote_retrieve_body( $request );
    $test = json_decode( $body, true );

    print_r($test) ; 
    echo $test[0]["Bank_name"]; 

Следующее работает нормально:

$someJSON = "[\r\n {\r\n \"Bank_id\": 1,\r\n \"Bank_name\": \"Aktia Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 2,\r\n \"Bank_name\": \"Bigbank\"\r\n },\r\n {\r\n \"Bank_id\": 3,\r\n \"Bank_name\": \"POP Pankit\"\r\n },\r\n {\r\n \"Bank_id\": 4,\r\n \"Bank_name\": \"Bonum Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 5,\r\n \"Bank_name\": \"Citibank\"\r\n },\r\n {\r\n \"Bank_id\": 6,\r\n \"Bank_name\": \"Danske Bank\"\r\n },\r\n {\r\n \"Bank_id\": 8,\r\n \"Bank_name\": \"DNB BANK ASA\"\r\n },\r\n {\r\n \"Bank_id\": 9,\r\n \"Bank_name\": \"Handelsbanken\"\r\n },\r\n {\r\n \"Bank_id\": 10,\r\n \"Bank_name\": \"Holvi\"\r\n },\r\n {\r\n \"Bank_id\": 11,\r\n \"Bank_name\": \"Nordea Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 12,\r\n \"Bank_name\": \"OP Ryhmä\"\r\n },\r\n {\r\n \"Bank_id\": 13,\r\n \"Bank_name\": \"S-Pankki\"\r\n },\r\n {\r\n \"Bank_id\": 14,\r\n \"Bank_name\": \"Swedbank\"\r\n },\r\n {\r\n \"Bank_id\": 15,\r\n \"Bank_name\": \"Säästöpankki\"\r\n },\r\n {\r\n \"Bank_id\": 16,\r\n \"Bank_name\": \"Alandsbanken\"\r\n }\r\n]";

  // Convert JSON string to Array
  $someArray = json_decode($someJSON, true);
   print_r($someArray);        // Dump all data of the Array
  echo $someArray[0]["Bank_name"]; // Access Array data
  echo $someArray[0]["Bank_id"]; // Access Array data

От второгоКстати, я получаю вывод Aktia Pankki1, что я ожидаю и от 1-го пути, но получаю это сообщение:

Предупреждение: недопустимое смещение строки 'Bank_name' в C: \ xampp \ htdocs \ wpsummerproject\ wp-content \ themes \ astra \ functions.php в строке 181

Ответы [ 3 ]

0 голосов
/ 13 июня 2019

Попробуйте:

$url      = 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo';

$response = wp_remote_get( esc_url_raw( $url ) );

/* Will result in $api_response being an array of data,
parsed from the JSON response of the API listed above */

$api_response = json_decode( wp_remote_retrieve_body( $response ), true );

Это пример из codex.wordpress.org Ваша ссылка: https://tv -api-dev.azurewebsites.net / api / GetBankInfo переходит к действительному json. Должно работать.

0 голосов
/ 13 июня 2019

Это будет работать в вашем случае,

$request = wp_remote_get( 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo' );
if( is_wp_error( $request ) ) {
    return false; 
}

$body = wp_remote_retrieve_body( $request );
$test = json_decode( $body,true );
$test = json_decode($test,true);

echo $test[0]['Bank_name'];
0 голосов
/ 13 июня 2019

Я попробовал данные с данного URL.Не знаю, почему, но в первом json_decode() полученное значение является единственным объектом JSON с подпунктами.Когда это значение снова вызывается с json_decode(), тогда значение получается как массив.Вы можете сначала проверить в источнике, как данные преобразуются в JSON.Кажется, есть проблема.

$request = wp_remote_get( 'https://tv-api-dev.azurewebsites.net/api/GetBankInfo' );
if( is_wp_error( $request ) ) {
    return false;
}

$body = wp_remote_retrieve_body( $request );
$body_content = json_decode( $body, true );
$details = json_decode( $body_content, true );
print_r( $details[0]['Bank_name']);
print_r( $details[0]['Bank_id']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...