使用一些嵌套的JSON对象读取Guzzle响应

时间:2017-07-31 13:36:31

标签: php json guzzle

我使用Guzzle库向我的api发出了一个http请求如下:

$client = new Client();
            $response = $client->request(
                'GET',
                config('some_url');
            $serverResponse = json_decode($response->getBody(),true);
            if ($serverResponse['result']) {
                $data = $serverResponse['data'];

现在我收到了回复

{
    "result": true,
    "data": {
        "101": {
            "id": 101,
            "name": "ABCD",
            "age" : 24
            },
         "102": {
            "id": 102,
            "name": "EFGH",
            "age" : 24
            },
         "103": {
            "id": 103,
            "name": "IJKL",
            "age" : 24
            },
}
}

问题是我需要读取并将对象模型101,102,103推送到单独的数组。为此,我尝试将对象作为以下选项。但我无法得到结果而不是错误。

$obj = $data[0];

返回Undefined offset:0 error

3 个答案:

答案 0 :(得分:2)

因为您的数据是手动索引的,而不是像:

{
    "data": {
        0: {
           "id": 101,
           ...
        },
        1: {
           "id": 102,
           ...
        },
        ...
     }
}

获取数据时需要指定这些索引。 E.g:

$data["101"]

要为动态设置数据执行此操作,您可以使用array_keys

$obj = $data[array_keys($data)[0]];

使用array_keys,您可以使用$data

的数字索引搜索$data

答案 1 :(得分:1)

如果您只是想重新索引数组,以便密钥为[0][1][2]等,您可以使用以下内容:

$newArray = array_values($data);

然后,您将能够使用$newArray[0]访问第一个子数组,使用$newArray[1]访问第二个子数组等。

答案 2 :(得分:0)

您可以将响应转换为对象,然后您可以访问以下属性。

$obj = json_decode($response->getBody());
$one_zero_one = $obj->data->{101};