Получить электронную почту из массива JSON

Я пытаюсь использовать API fiken.no для получения номеров клиентов. API основан на HAL+JSON, и я хочу получить доступ к данным с помощью PHP.

При создании новой учетной записи вы не получаете ответа, а только HTTP 201, поэтому, чтобы получить сгенерированный номер клиента, мне нужно использовать конечную точку поиска.

Эта конечная точка возвращает только всех пользователей следующим образом:

{
"_links": {
    "self": {
        "href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts"
    }
},
"_embedded": {
    "https://fiken.no/api/v1/rel/contacts": [
        {
            "_links": {
                "self": {
                    "href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/757941482"
                }
            },
            "name": "Ola Nordmann 2",
            "email": "[email protected]",
            "address": {
                "country": "Norge"
            },
            "customerNumber": 10003
        },
        {
            "_links": {
                "self": {
                    "href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/757941171"
                }
            },
            "name": "Ola Nordmann 1",
            "email": "[email protected]",
            "address": {
                "country": "Norge"
            },
            "customerNumber": 10002
        },
        {
            "_links": {
                "self": {
                    "href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/756867201"
                }
            },
            "name": "Demoleverandør",
            "address": {
                "address1": "Demoveien 44",
                "address2": "",
                "postalPlace": "Oslo",
                "postalCode": "0190",
                "country": "Norge"
            },
            "supplierNumber": 20001
        },
        {
            "_links": {
                "self": {
                    "href": "https://fiken.no/api/v1/companies/fiken-demo-personlig-gnist-enk/contacts/756867200"
                }
            },
            "name": "Demokunde",
            "address": {
                "address1": "Demoveien 22",
                "address2": "",
                "postalPlace": "Oslo",
                "postalCode": "0190",
                "country": "Norge"
            },
            "customerNumber": 10001
        }
    ]
}}

Из этого ответа мне нужно запросить, например, адрес электронной почты [email protected] и получить от него весь пользовательский объект. Это включает в себя адресные данные и особенно номер клиента. Как бы я это сделал?

Я нашел это: Поиск ключа в Json (вложенный массив) PHP, похоже на мои проблемы, но здесь ключ постоянен в массиве JSON. Здесь от 0 и до бесконечности.

Есть ли лучший способ обработать это с помощью PHP, чем обычные методы JSON?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
0
1 019
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Первым делом нужно было бы декодировать JSON в массив:

$resultArray = json_decode($yourJSONvariable, true);

Далее я бы рекомендовал изолировать массив контактов от массива JSON:

$contacts = $resultArray["_embedded"]["https://fiken.no/api/v1/rel/contacts"];

Теперь $contacts должен быть массивом всех контактов из вызова API. Вы можете просмотреть каждый из них, чтобы найти запись с соответствующим адресом электронной почты, например:

foreach ($contacts as $contact) {
    if ($contact["email"] == "[email protected]") {
        $mycontact = $contact;
        break;
    }
}

$mycontact теперь будет содержать массив контактов с соответствующим адресом электронной почты, и вы можете получить доступ к его отдельным полям, используя имена полей в качестве индекса массива (например, $mycontact["name"], $mycontact["address"]["country"], $mycontact["_links"]["self"]["href"]). Чтобы увидеть все данные в массиве, выполните var_dump($contacts).

Спасибо за ответ. Я думал об использовании foreach, но мне было интересно, рекомендуется ли это или нет. Но теперь я знаю. Спасибо за помощь дружище. Кстати. Отредактировал свой пост, так как, когда вы ссылались на ключ _embedded json, вы случайно пропустили подчеркивание

Oscar Sortland Kolsrud 02.02.2019 00:22

Мне еще предстоит найти лучший способ поиска в JSON и возврата конкретной записи. Более идеальным решением было бы, если бы вы могли запросить конечную точку контактов с параметром электронной почты, но я просмотрел документацию, и это не представляется возможным.

tshimkus 02.02.2019 00:32

Нет, Fiken — начинающая компания, поэтому я полностью понимаю, что их API — это WIP. Большое спасибо за то, что помогли мне в этом и даже нашли время, чтобы просмотреть документы fiken api, хотя я забыл связать их.

Oscar Sortland Kolsrud 02.02.2019 00:37

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