Фильтровать ответ JSON в PHP

У меня есть API, и мне нужно проверить ввод, затем, если он действителен, я печатаю некоторые объекты ответа JSON. Что у меня есть:

  <?php
                $headers = [
                    "User-Agent: Test API",
                    "token: *my-token*"
                ];
                
                $accountid = $_POST['accountid'];
                $url = "https://my+api+url/$accountid";           
                
                $ch = curl_init($url);

                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

                $result = curl_exec($ch);
                curl_close($ch);
                
                $data = json_decode($result, true);

                if (preg_match('/404/',$result)){
                    echo "AccountID invalid.";
                }
                else {
                    echo "AccountID valid:\n";
                } 
                ?>

И возврат правильный, я получаю свой ответ API. Мой API возвращает это:

{
    "status": "ACTIVE",
    "id": "DEFAULT",
    "add": [{
        "key": "state",
        "value": "New York"
    }, {
        "key": "city",
        "value": "New York"
    }],
    "created": "2023-01-16",
    "modified": "2023-01-16",
    "_id": "50000000"
}

Я пытаюсь отфильтровать этот ответ JSON, например, если он действителен, я хочу, чтобы он показывал мне только «статус», «модифицированный» и _ «id» из моего JSON. Я очень новичок в PHP, все еще учусь. Кто-нибудь может мне помочь?

Я пытался использовать foreach внутри своего else вот так:

               $data = json_decode($result, true);

                if (preg_match('/404/',$result)){
                    echo "AccountID invalid.";
                }
                else {
                    echo "AccountID valid:\n";
                    foreach ($data as $values){
                     echo $values["status"],
                     echo $values["modified"],
                     echo $values["_id"];

                } 

ошибка: Uncaught TypeError: невозможно получить доступ к смещению строки типа в строке.

Вы пытаетесь перебрать $data, что означает, что в первом цикле у вас будет ключ status и значения ACTIVE. Поскольку это один объект, и вы знаете, какие свойства вы хотите получить, удалите цикл foreach.

aynber 16.01.2023 19:54

о, это было проще, чем я себе представлял... спасибо @aynber!!

cyberphantom 16.01.2023 20:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно проверить, есть ли статус ACTIVE, а затем получить доступ к данным json.

<?php 
   if ( $result === false){
     echo "Error Request";
   }else{
     $data = json_decode($result);
     if ($data->status == "ACTIVE"){
       echo $data->_id;
        echo $data-> modified
     }else{
      echo "Invalid Data";
     }
  }

Другие вопросы по теме