如何解析json数组?

时间:2013-03-30 14:50:22

标签: php arrays json parsing

我一直试图解析json数组但没有成功。我可以获得根元素但不能获得任何数组元素。下面是来自Foursquare的json数组的开头,它有重新出现的场地元素。

     response: {
          keywords: {}
          suggestedRadius: 10000
          headerLocation: "here"
          headerFullLocation: "here"
          headerLocationGranularity: "unknown"
          headerMessage: "Suggestions for Friday evening"
          totalResults: 214
             groups: [
               {
                  type: "Recommended Places"
                  name: "recommended"
                  items: [
                      {
                       reasons: {
                       count: 0
                       items: [ ]
                        }
                       venue: {
                            id: "4b799a05f964a520b1042fe3"
                            name: "Green Gables"
                            contact: {
                            phone: "3097472496"
                            formattedPhone: "(309) 747-2496"
                                  }
                            location: {
                            address: "17485 East 2500 North Rd"

下面是我的PHP代码,试图获取餐馆的名称。

        $uri = file_get_contents("https://api.foursquare.com/v2/venues/explore?ll=40.7,-89&oauth_token=xxxxxxxxx", true);
        $obj = json_decode($uri, true);

         foreach($obj['response']['groups']['items']['venue'] as $p)
       {']
           if(isset($p['name))  
           echo  $p['name'];
       }

当我执行此代码时,我收到错误消息“无效索引:场地。如果我只使用foreach($ obj ['response'] ['groups']作为$ p)我得到结果。因此,它与确定组下元素的名称有关。

确定。这是我最新的PHP代码。它向下钻取到name元素,然后给出一个错误,说“Unefined index:name”以及“非法字符串偏移名称”。此消息出现14次,这对于数组中的每个项目都是一次。那么为什么是“name” “没有认识到?有任何想法。

    foreach($obj['response']['groups'] as $p)
   {
   if(isset($p['items']))
   {
     foreach($p['items'] as $p1)
 {
  if(isset($p1['venue']))
  {
//   echo varDumpToString($p1['venue']);  // this dump works ok and shows the elements
 foreach($p1['venue'] as $p2)
 {

     echo varDumpToString($p2['name']);   //  This is where I get the error
   }
   }
   }
   }   
   }

1 个答案:

答案 0 :(得分:1)

因为您正在将JSON对象解析为PHP数组(json_decode的第二个参数),但是,您正在访问结果,就像它是一个对象一样。

使用数组下标访问元素($obj['response']['groups']['items']['venue']),或者解析为对象(json_decode($uri, false)json_decode($uri)