2014-01-05 3 views
2

Я пытался тренироваться, как прокручивать и выводить содержимое json-файла, где имена полей начинаются с «$» и продолжают получать Undefined переменное сообщение ошибки

Вот пример пример JSON файла (берется из https://mixpanel.com/help/reference/webhooks):

[ 
    { 
     "$distinct_id":"13b20239a29335", 
     "$properties":{ 
     "$region":"California", 
     "$email":"[email protected]", 
     "$last_name":"Bovik", 
     "$created":"2012-11-20T15:26:16", 
     "$country_code":"US", 
     "$first_name":"Harry", 
     "Referring Domain":"news.ycombinator.com", 
     "$city":"Los Angeles", 
     "Last Seen":"2012-11-20T15:26:17", 
     "Referring URL":"http://news.ycombinator.com/", 
     "$last_seen":"2012-11-20T15:26:19", 
     } 
    }, 
    { 
     "$distinct_id":"13a00df8730412", 
     "$properties":{ 
     "$region":"California", 
     "$email":"[email protected]", 
     "$last_name":"Lytics", 
     "$created":"2012-11-20T15:25:38", 
     "$country_code":"US", 
     "$first_name":"Anna", 
     "Referring Domain":"www.quora.com", 
     "$city":"Mountain View", 
     "Last Seen":"2012-11-20T15:25:39", 
     "Referring URL":"http://www.quora.com/What-...", 
     "$last_seen":"2012-11-20T15:25:42", 
     } 
    } 
] 

Я проверяю со статической строкой, просто чтобы попробовать и все заработало. Вот мой тестовый код ...

<?php 

    $input = '[{"$distinct_id":"13b20239a29335","$properties":"dddd"}]'; 
    $jsonObj = json_decode($input, true); 

    foreach ($jsonObj as $item) { 
     foreach ($item as $rec) { 
      echo '<br>'; 
      $my_id = $rec->$distinct_id; 
      echo($my_id); 
      $my_id = $rec->$properties; 
      echo($my_id); 
     } 
     echo '<br>'; 
    } 
?> 

Любая помощь будет принята с благодарностью.

Noob!

UPDATE: Муса привел этот пример, который работает на одном JSON уровня: Еогеаспа ($ jsonObj в $ п) {

echo '<br>'; 
    $my_id = $item->{'$distinct_id'}; 
    echo($my_id); 
    $my_id = $item->{'$properties'}; 
    echo($my_id); 

echo '<br>'; 

}

Как это может затем быть адаптировано для чтения и вывод все элементы большого многоуровневого json-файла?

ответ

6

Используйте фигурные скобки обозначения

$object->{'$property'}; 

Редактировать

foreach ($jsonObj as $item) { 

     echo '<br>'; 
     $my_id = $item->{'$distinct_id'}; 
     echo($my_id); 
     foreach ($item->{'$properties'} as $my_prop => $value){ 
      echo("$my_prop => $value"); 
     } 

    echo '<br>'; 
} 

http://codepad.org/1cudZqlu

С вложенного цикла вы Итерируя свойства $distinct_id и $properties так $rec на самом деле является строка, а не объект.

Также ваш json недействителен, так как он имеет , в поле $properties.

+0

Спасибо за это Муса. Очень признателен. Как я мог бы затем прокручивать более глубокие элементы из основного json-файла? – user2525060

+0

@ пользователь2525060 обновлен – Musa

Смежные вопросы