2013-03-30 205 views
0

我一直在試圖解析一個沒有成功的json數組。我可以得到一個根元素,但沒有任何數組元素。下面是我的Foursquare的json數組的開始,它有重新發生的場地元素。如何解析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']; 
     } 

當我執行此代碼時,我收到一個錯誤,提示'Invalid index:venue。如果我只使用foreach($ obj ['response'] ['groups']作爲$ p),我會得到結果。所以它與確定組下的元素的名稱有關。

好的。這是我最新的PHP代碼。它深入到名稱元素,然後給我一個錯誤,說「Unefined index:name」和「Illegal string offset name」。這條消息出現14次,這是數組中每個項目的一次。 「不recongized?任何想法。

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 
    } 
    } 
    } 
    } 
    } 
+0

這是完整的和逐字迴應嗎?如果是這樣,它甚至不是有效的JSON。 (缺少逗號,缺少外層包袱,...) – knittl

+0

我改變了foreach,如下所示:foreach($ obj ['response'] ['groups'] ['items'] ['venue'] as $ p)建議我改變? – Dave

+0

您發佈的回覆無效JSON,json_decode無法正常工作。如果您不完整地發佈它,您可能需要使用'var_dump'來查看已解碼的對象並從中得出正確的下標。 – knittl

回答

1

因爲你解析JSON對象作爲PHP數組(的json_decode第二個參數),不過不失,您正在訪問的結果,就好像它是一個對象。

使用數組下標來訪問元素($obj['response']['groups']['items']['venue'])或解析爲對象(json_decode($uri, false)json_decode($uri)

+0

我將我的代碼更改爲foreach($ obj ['response'] ['groups'] ['items'] ['venue']爲$ p),現在它給了我一個錯誤說未定義的索引:項目。如果我刪除索引,它說'組'相同的錯誤。我必須解釋json結構錯誤或某事。 – Dave