使用PHP访问多维JSON数组中的值

时间:2016-03-24 17:21:11

标签: php arrays json

我在这里阅读了几篇帖子,并且无法找到解决我遇到的问题的成功。

我试图找出如何从UploadImage数组中获取NAME字段。

我从Webhook向我传递了以下JSON。

{
"$version":5,
"Entry":{
    "Number":"11",
    "Order":null,
    "Origin":
        {
        "City":"Portland",
        "CountryCode":"US",
        }
        ,
"Message":"the message",
"UploadImage":[
    {
        "ContentType":"image/png",
        "Id":"F-lMbiCYdwiYS8ppkQS4gsyE",
        "Name":"Screen.png",
        "Size":55907
    }
            ],
"Subject":"here is the subject" 
}

抓取Subject或Message的值没有问题,但我无法弄清楚如何在UploadImage中抓取NAME。

  $contact = json_decode($json);  
  $subject=$contact->{'Subject'};

当我这样做时

    $uploadimage=$contact->{'UploadImage'};  

它只是写出了ARRAY。

我能做到

 echo  $contact->{'Entry'}->{'Number'}; 

并且它有效,所以它必须是括号在大括号之前存在的东西。我知道这必须是我想念的简单事物。 非常感谢任何帮助。

6 个答案:

答案 0 :(得分:1)

首先尝试

$contact = json_decode($json, true);

添加第二个参数会返回一个数组而不是一个对象,这会使事情变得更容易。带数字键的对象很麻烦......现在你可以,

print_r($contact);

准确了解您的情况。我想象中

echo $contact['UploadImage'][0]['Name'];

会得到你想要的东西。

请注意UploadImage包含一个对象数组(或转换后的数组数组)。

答案 1 :(得分:1)

$uploadimage=$contact->{'UploadImage'}[0]->{'Name'};

答案 2 :(得分:1)

另一种解决方案是:

$contact = json_decode($text);
$name = '';
foreach($contact->UploadImage as $k=>$v){
    foreach($v as $k2=>$v2){
        echo $k2.' - '.$v2.'<br />';
        if($k2=='Name'){ $name = $v2;}
    }

};
var_dump($name);

//响应

ContentType - image/png
Id - F-lMbiCYdwiYS8ppkQS4gsyE
Name - Screen.png
Size - 55907
//name
string 'Screen.png' (length=10)

答案 3 :(得分:0)

您是否尝试使用如下所示:

$uploadimage=$contact->UploadImage[0]->Name;  

答案 4 :(得分:0)

在JSON中,方括号[]标记数组部分,花括号{}标记对象。在您的JSON字符串中,UploadImage是一个包含单个对象的数组。

答案 5 :(得分:-2)

尝试更改您的JSON,如下所示:

func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {

    externalVideoBufferDelegate?.captureOutput!(captureOutput, didOutputSampleBuffer: sampleBuffer, fromConnection: connection)

    dispatch_async(videoQueue) {
        if self.assetWriterVideoInput.readyForMoreMediaData {
            self.assetWriterVideoInput.appendSampleBuffer(sampleBuffer)
        }
    }
}