从奇怪的JSON数组响应中提取数据

时间:2016-03-23 13:42:21

标签: php arrays json

我正在使用API​​,响应很奇怪。我需要从下面的响应中获取ID字段。

{
    "message_campaigns": [
        {
            "embedded_errors": [],
            "id": "2729",
            "is_legacy_message": false,
            "is_setup_complete": false,
            "message_campaign_type_id": 1,
            "name": "Message Campaign 1",
            "organization_id": 123
        }
    ]
}

以下是我的尝试:

$result = curl_exec($ch);
curl_close($ch);  // Seems like good practice
$responseData = json_decode($result, TRUE);
print_r($responseData);

我尝试了几种方法但无法使其正常工作

$responseData[0]['id'];
$responseData->id;

我无法弄清楚如何显示id

3 个答案:

答案 0 :(得分:0)

这是因为结果是array,因为您将第二个参数作为true传递给json_decode

  

When TRUE, returned objects will be converted into associative arrays.

在JSON中,{}代表对象,[]代表数组。您已将所有对象转换为关联数组,因此这将起作用:

$responseData['message_campaigns'][0]['id']

答案 1 :(得分:0)

您将json_decode的第二个参数设置为true,因此将返回一个数组(不是对象)。

您还需要访问message_campaigns作为数组中的第一项。

$responseData['message_campaigns'][0]['id'];

可以测试:

$result = <<< EOT
{
    "message_campaigns": [
        {
            "embedded_errors": [],
            "id": "2729",
            "is_legacy_message": false,
            "is_setup_complete": false,
            "message_campaign_type_id": 1,
            "name": "Message Campaign 1",
            "organization_id": 123
        }
    ]
}
EOT;

$responseData = json_decode($result, TRUE);

echo $responseData['message_campaigns'][0]['id'];
// 2729

答案 2 :(得分:0)

假设你的curl_exec实际上返回了一个响应,因为你设置了curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

如果我看一下你需要的json回复:

$responseData['message_campaigns'][0]['id'];