2017-05-07 38 views
1

我收到此JSON提取:挣扎着从嵌套的JSON(PHP)

-{ 
"events" : -[ 
0-{ 
"eventName" : service-review-created, 
"version" : 1, 
"eventData" : -{ 
"id" : xxxxxxxx, 
"language" : en, 
"stars" : 5, 
"title" : Friendly sales staff that are genuine, 
"text" : Friendly sales staff that are genuine, helpful and most of all NOT pushy and annoying!, 
"referenceId" : xxxxxxx, 
"createdAt" : 2017-05-07T21:12:00Z, 
"link" : https://api.trustpilot.com/v1/reviews/xxxxxxxxxxx, 
"consumer" : -{ 
"id" : xxxxxxxxx, 
"name" : Mrs xxxx xxxxx, 
"link" : https://api.trustpilot.com/v1/consumers/590f8da00000ff000a9582aa 
} 
} 
} 
] 
} 

我试图提取价值的“明星”。

这就是我想,但似乎没有奏效:

$data = json_decode('{"events":[{"eventName":"service-review-created","version":"1","eventData":{"id":"xxxxxxx","language":"en","stars":5,"title":"Friendly sales staff that are genuine","text":"Friendly sales staff that are genuine, helpful and most of all NOT pushy and annoying!","referenceId":"xxxxxx","createdAt":"2017-05-07T21:12:00Z","link":"https://api.trustpilot.com/v1/reviews/590f8da02ecbfc09e8d3045d","consumer":{"id":"590f8da00000ff000a9582aa","name":"Mrs xxxxxxx","link":"https://api.trustpilot.com/v1/consumers/5xxxxxxxx"}}}]}'); 


     $stars = $data->events->eventData->stars; 
     echo $stars; 

会很高兴,如果有人可以告诉我,我要去哪里错了。

+0

你可能会发现'var_dump'有助于看到你做错了什么。 –

+0

Hi @ Rizier123 - 这是一个小菜鸟问题,授予。您标记为重复的问题包含大量复杂的问题(对于noob答案)。我不会考虑这个问题,而且这个问题是重复的。我只是读了另一个答案,它读起来像对我来说是胡言乱语。这就是一个简单的问题和一个简单的解决方案。 –

+0

嗯,你问的是如何访问一个对象内的特定值,而重复则准确地向你解释了如何去做。 – Rizier123

回答

2

$data->events是一个数组,而不是对象。你可以这样做$stars = $data->events[0]->eventData->stars

+0

Thankyou - 令人沮丧的是,这是我尝试过的很多事情之一,并没有奏效。但是现在我明白了它的确如此。当我尝试过之前,一定有错字或其他错误。 –

+0

这是解决方案。谢谢! –

0

国际海事组织你必须削减到切片数据,以彻底操纵它们。

$stars =(); 
foreach($data as $key1 => $value1) { 
    foreach($value1 as $key2 => $value2) { 
    foreach($value2 as $key3 => $value3) { 
     if ($key3 == 'eventData') { 
     array_push($stars, $value3["stars"]); 
     } 
    } 
    } 
} 

echo implode(", ", $stars); 

我是操作JSON数据的新手,但这是我做到的。只要告诉我,如果这不是你正在寻找。谢谢!

编辑:

你也可以这样做,如果你只对你一个事件的数据:

$stars = $data["events"][0]["eventData"]["stars"]; 

注:我知道这是一个不以提取单个的最好方法,但如果你知道一个我很乐意听