2013-03-30 6 views
0

Я пытаюсь разобрать массив json без успеха. Я могу получить корневой элемент, но не любые элементы массива. Ниже представлено начало моего массива 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», а также «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'] as $ p), и теперь он дает мне ошибку Указание Undefined index: items. Если я удалю индекс, он говорит ту же ошибку для «групп». Я должен интерпретировать структуру json неправильно или что-то в этом роде. – Dave