从JSON数组获取电子邮件

时间:2019-02-01 22:32:37

标签: php json api hal

已经尝试解决这一问题了一天。我试图用fiken.no`s API来检索customernumbers。该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": "mail@mail.com",
            "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": "findthis@example.com",
            "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
        }
    ]
}}

从此响应中,我需要查询f.ex电子邮件findthis@example.com,并从中获取整个用户对象。这包括地址数据,尤其是CUSTOMERNUMBER。我该怎么做呢?

我发现了这个问题:Search a key in a Json (nested array) PHP看起来像我的问题,但是这里的键在json数组中是恒定的。从0到无穷大。

有没有比普通的JSON方法更好的方法来使用PHP处理此问题? 感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

的第一件事是将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"] == "findthis@example.com") {
        $mycontact = $contact;
        break;
    }
}

$mycontact现在将包含匹配电子邮件的联系人数组,并且您可以使用字段名称作为数组索引来访问其各个字段(例如$mycontact["name"]$mycontact["address"]["country"]$mycontact["_links"]["self"]["href"])。要查看数组中的所有数据,请执行var_dump($contacts)