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

137
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

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

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

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

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

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

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

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

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

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

110