Я пытаюсь разобрать массив 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
}
}
}
}
}
Это полный и дословный ответ? Если это так, это даже не справедливо JSON. (Пропущенные запятые, отсутствующие парсы внешнего уровня, ...) – knittl
Я изменил foreach следующим образом: foreach ($ obj ['response'] ['groups'] ['items'] ['venue'] as $ p) Что вы предлагаю изменить? – Dave
Ответ, который вы опубликовали, недействителен JSON, json_decode не может работать. Если вы разместили его не полностью, вы можете использовать 'var_dump', чтобы посмотреть на декодированный объект и получить от него правильные индексы. – knittl