如何在PHP中处理复杂的json对象

时间:2016-05-05 16:12:26

标签: php json ibm-cloud

我有一个在Bluemix中运行的PHP应用程序,我想扩展它以调用RESTful服务(Insights for Twitter)。我已经能够调用该服务,检索json主体,并使用json_decode创建一个数组:

$insightList = json_decode($guzzleResponse ->getBody(), true);

但是,我无法弄清楚如何访问我感兴趣的领域。我已经在网上搜索了解决方案并尝试了一些看起来很有前景的方法,但是当时我试图整合它们,我无法让它们发挥作用。我是一个PHP新手,所以如果某些东西不起作用,我不知道如何继续。

json结构非常复杂,有三个顶级数组 - search tweets next 。我对其中的第二篇推特感兴趣。它是一个相当复杂的数组 - 每条推文都有一个条目。我现在想要的字段是tweets.cde.message.body。您可以在此处找到完整架构:https://cdeservice.eu-gb.mybluemix.net/rest-api/#!/messages/getTweets

这是我到目前为止的代码:

 foreach($insightList as $cde) {
    foreach($cde as $message) {
    $insight = $message['body'];
    if(strlen($insight) > 60) {
      $posts[] = array(
      'id' => 99999999,
      //Temp; remove links from the text
      'text' => $insight,
      'category' => $insightCategory,
      'image' => 'false'
    );        
  }
 }
}

这是$ insightList的print_r:

    [search] => Array (
    [results] => 28
    [current] => 28
    )
[tweets] => Array (
    [0] => Array (
        [cde] => Array (
            [author] => Array (
                [gender] => male
                [parenthood] => Array (
                    [isParent] => unknown
                    )
                [location] => Array (
                    [country] => 
                    )
                [maritalStatus] => Array (
                    [isMarried] => unknown
                    )
                )
            [content] => Array (
                [sentiment] => Array (
                    [evidence] => Array ( )
                    [polarity] => NEUTRAL
                    )
                )
            )
        [message] => Array (
            [postedTime] => 2015-01-13T09:42:16.000Z
            [verb] => share
            [link] => http://twitter.com/zWDOM/statuses/554936456477933569
            [generator] => Array (
                [displayName] => Twitter Web Client
                [link] => http://twitter.com
                )
            [body] => RT @VisualSuccess: "Mainframe & Cloud" Magazine wurde soeben publiziert! http://www.twitter.com  @zWDOM @Rocket @JohnKnutson_IBM
            [favoritesCount] => 0
            [objectType] => activity
            [actor] => Array (
                [summary] => Seit über 25 Jahren im Mainframebereich, derzeit als Senior Consultant und IT Architekt für zEnterprise und Projektmanager beim IBM BP Cancom in Köln
                [image] => https://pbs.twimg.com/profile_images/424202233463308288/XQquUcnh_normal.jpeg
                [statusesCount] => 2309
                [utcOffset] => 3600
                [languages] => Array (
                    [0] => de
                    )
                [preferredUsername] => zWDOM
                [displayName] => Willi Domroese
                [postedTime] => 2009-12-17T01:39:25.000Z
                [link] => http://www.twitter.com/zWDOM
                [verified] => 
                )
            [provider] => Array (
                [displayName] => Twitter
                [link] => http://www.twitter.com
                [objectType] => service
                )
            [twitter_filter_level] => medium
            [twitter_entities] => Array (
                [urls] => Array (
                    [0] => Array (
                        [display_url] => ln.is/paper.li/visua…
                        [indices] => Array (
                            [0] => 77
                            [1] => 99
                            )
                        [expanded_url] => http://ln.is/paper.li/visualsucce/7zYNk
                        [url] => http://www.twitter.com
                        )
                    )
                [hashtags] =>  Array ( )
                [user_mentions] => Array (
                    [0] => Array (
                        [indices] => Array (
                            [0] => 3
                            [1] => 17
                            )
                        [screen_name] => VisualSuccess
                        [id_str] => 213337792
                        [name] => Predrag Gasic
                        [id] => 213337792
                        )
                    [1] => Array (
                        [indices] => Array (
                            [0] => 101
                            [1] => 107
                            )
                        [screen_name] => zWDOM
                        [id_str] => 97334013
                        [name] => Willi Domroese
                        [id] => 97334013
                        )
                    [2] => Array (
                        [indices] => Array (
                            [0] => 108
                            [1] => 115
                            )
                        [screen_name] => Rocket
                        [id_str] => 870584947
                        [name] => Rocket Software
                        [id] => 870584947
                        )
                    [3] => Array (
                        [indices] => Array (
                            [0] => 116
                            [1] => 132
                            )
                        [screen_name] => JohnKnutson_IBM
                        [id_str] => 16452310
                        [name] => John Knutson
                        [id] => 16452310
                        )
                    )
                [trends] =>  Array ( )
                [symbols] =>  Array ( )
                )
            [twitter_lang] => de
            [id] => tag:search.twitter.com,2005:554936456477933569
            [retweetCount] => 1
            [gnip] => Array (
                [urls] => Array (
                    [0] => Array (
                        [expanded_url] => http://linkis.com/paper.li/visualsucce/7zYNk
                        [expanded_status] => 200
                        [url] => http://www.twitter.com
                        )
                    )
                [language] => Array (
                    [value] => de
                    )
                )
            [object] => Array (
                [postedTime] => 2015-01-13T08:04:48.000Z
                [verb] => post
                [link] => http://twitter.com/VisualSuccess/statuses/554911928527888384
                [generator] => Array (
                    [displayName] => Linkis.com
                    [link] => http://linkis.com
                    )
                [body] => "Mainframe & Cloud" Magazine wurde soeben publiziert! http://www.twitter.com ://www.twitter.com
                [objectType] => activity
                [actor] => Array (
                    [summary] => Ù† (N), Wirtschaftsinformatiker | SAP Consultant Logistics #bigdata #appdevelopment #webdesign #eCommerce #SocialMedia #contentmarketing #SmartHome #Journal
                    [image] => https://pbs.twimg.com/profile_images/2841607223/959b0d23646b1f24bd7b70deac160e2f_normal.jpeg
                    [statusesCount] => 14185
                    [utcOffset] => 3600
                    [languages] => Array (
                        [0] => de
                        )
                    [preferredUsername] => VisualSuccess
                    [displayName] => Predrag Gasic
                    [postedTime] => 2010-11-08T17:19:27.000Z
                    [link] => http://www.twitter.com/VisualSuccess
                    [verified] => 
                    )
                [provider] => Array (
                    [displayName] => Twitter
                    [link] => http://www.twitter.com
                    [objectType] => service
                    )
                [twitter_filter_level] => low
                [twitter_entities] => Array (
                    [urls] => Array (
                        [0] => Array (
                            [display_url] => ln.is/paper.li/visua…
                            [indices] => Array (
                                [0] => 58
                                [1] => 80
                                )
                            [expanded_url] => http://ln.is/paper.li/visualsucce/7zYNk
                            [url] => http://www.twitter.com
                            )
                        )
                    [hashtags] =>  Array ( )
                    [user_mentions] => Array (
                        [0] => Array (
                            [indices] => Array (
                                [0] => 82
                                [1] => 88
                                )
                            [screen_name] => zWDOM
                            [id_str] => 97334013
                            [name] => Willi Domroese
                            [id] => 97334013
                            )
                        [1] => Array (
                            [indices] => Array (
                                [0] => 89
                                [1] => 96
                                )
                            [screen_name] => Rocket
                            [id_str] => 870584947
                            [name] => Rocket Software
                            [id] => 870584947
                            )
                        [2] => Array (
                            [indices] => Array (
                                [0] => 97
                                [1] => 113
                                )
                            [screen_name] => JohnKnutson_IBM
                            [id_str] => 16452310
                            [name] => John Knutson
                            [id] => 16452310
                            )
                        )
                    [trends] =>  Array ( )
                    [symbols] =>  Array (
                    )
                )
            )
        )
    )

非常感谢这个问题的答案

2 个答案:

答案 0 :(得分:3)

迭代$insightList不会让你进入cde级别。而你实际上并不想要cde;你想要的消息。

只需重复推文即可。您不需要foreach从PHP数组中获取键控信息。

foreach($insightList['tweets'] as $tweet) {
        $insight = $tweet['message']['body'];
        if(strlen($insight) > 60) {
            $posts[] = array(
            'id' => 99999999,
            //Temp; remove links from the text
            'text' => $insight,
            'category' => $insightCategory,
            'image' => 'false'
        );        
    }
}

答案 1 :(得分:1)

我从你的print_r看到你想要的是:

echo $insightList[0]['message']['body'];

如果有这样的部分[some_key],那么'some_key'是一个关联数组键,您可以使用键名访问这些元素,无论是其他数组还是值,如此处所示。