Как парсить JSON и вывести результат на PHP?

125
26 марта 2022, 21:10

При выполнении следующего кода:

<?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.cloudflare.com/client/v4/zones');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

    $headers = array();
    $headers[] = 'X-Auth-Email: n*****y@gm***l.com';
    $headers[] = 'X-Auth-Key: 99c22da2f4b*******9b8';
    $headers[] = 'Content-Type: application/json';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $result = curl_exec($ch);
    var_dump($result);
    curl_close($ch);

Получаю ответ в JSON:

string(32263) "{"result":[{"id":"7ca47d86d0f56fe45ad01edb6c4c7771","name":"airbeautty.xyz","status":"active","paused":false,"type":"full","development_mode":0,"name_servers":["megan.ns.cloudflare.com","pete.ns.cloudflare.com"],"original_name_servers":["ns1.dns-parking.com","ns2.dns-parking.com"],"original_registrar":null,"original_dnshost":null,"modified_on":"2020-02-03T09:42:48.400052Z","created_on":"2020-01-21T16:08:27.427894Z","activated_on":"2020-01-21T20:45:26.569680Z","meta":{"step":4,"wildcard_proxiable":false,"custom_certificate_quota":0,"page_rule_quota":3,"phishing_detected":false,"multiple_railguns_allowed":false},"owner":{"id":"e83cce4c2dbf21dabfae3b934e5f38dc","type":"user","email":"nhmelevskiy@gmail.com"},"account":{"id":"765fc88c380e008cc8556461647b83ca","name":"nhmelevskiy@gmail.com"},"permissions":["#access:edit","#access:read","#analytics:read","#app:edit","#auditlogs:read","#billing:edit","#billing:read","#cache_purge:edit","#dns_records:edit","#dns_records:read","#lb:edit","#lb:read","#legal:edit","#legal:read","#logs:edit","#logs:read","#member:edit","#member:read","#organization:edit","#organization:read","#ssl:edit","#ssl:read","#stream:edit","#stream:read","#subscription:edit","#subscription:read","#waf:edit","#waf:read","#webhooks:edit","#webhooks:read","#worker:edit","#worker:read","#zone:edit","#zone:read","#zone_settings:edit","#zone_settings:read"],"plan":{"id":"0feeeeeeeeeeeeeeeeeeeeeeeeeeeeee","name":"Free Website","price":0,"currency":"USD","frequency":"","is_subscribed":true,"can_subscribe":false,"legacy_id":"free","legacy_discount":false,"externally_managed":false}},
    ?>

Как мне выводить только name (airbeautty.xyz) и id (7ca47d86d0f56fe45ad01edb6c4c7771) при учёте, что их может быть много и нужно вывести все?

Понимаю, что нужно декодировать JSON , но я не силен в этом, буду признателен за помощь!

Answer 1

Очень просто:

$result = json_decode($result, true)['result'];
$data = array();
foreach($result as $item) {
    array_push($data, array(
        'id' => $item['id'],
         'name' => $item['name']
    ));
}
var_dump($data);

Работа с массивами: https://www.php.net/manual/ru/language.types.array.php

Работа с JSON: https://www.php.net/manual/ru/book.json.php

READ ALSO
Получить массив из таблицы БД через PDO

Получить массив из таблицы БД через PDO

Мне нужно получить из БД sqlite массив всех строк таблицы tableЧерез PDO

170
Постоянно отключается, база данных vestaCP

Постоянно отключается, база данных vestaCP

поставил на сервер digitalOcean панель управления сервером VstaCp, после чего под ее пользователем установил wordpress, проблема в том, что база данных...

116
Как добавить теги найденному значению в PHP?

Как добавить теги найденному значению в PHP?

Всем привет, подскажите пожалуйста как добавить теги найденным значениям в PHP? необходимо обернуть в тег а всех упомянутых пользователей

97
Не выводится alert, laravel

Не выводится alert, laravel

Хочу сделать оповещение при сохранении данных В контроллере return redirect()->route('adminsettings')->with('success', 'Настройки успешно сохранены!'); Создал flash-message

101