Не могу разобрать этот JSON в php

Я пытаюсь получить некоторые письма от Yahoo Query Language, используя OAuth, все в порядке, за исключением того, что YQL возвращает JSON, и я почему-то не могу его проанализировать!

Я могу анализировать простые JSON, например

'{"hello":"world"}'

но не этот:

{
"query": {
    "count": 1,
    "created": "2012-08-11T19:22:51Z",
    "lang": "en-US",
    "results": {
        "result": {
            "messageInfo": [
                {
                    "from": {
                        "name": "[email protected]"
                    },
                    "subject": "Success! You have shared your Yahoo! information"
                },
                {
                    "from": {
                        "name": "[email protected]"
                    },
                    "subject": "Success! You have shared your Yahoo! information."
                },
                {
                    "from": {
                        "name": "[email protected]"
                    },
                    "subject": "Success! You have shared your Yahoo! information."
                },
                {
                    "from": {
                        "name": "Yahoo!"
                    },
                    "subject": "Welcome to Yahoo!"
                }
            ]
        }
    }
}
}

Я попытался проверить его в http://jsonlint.com/.

и это действительно!

Изменить: мне нужно отобразить «от: имя» и «тема» в таблице, подобной структуре.

Фрагмент кода, который я написал, таков:

$sdata = call_yql(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET,
               $access_token, $access_token_secret,
               false, true);
$json_data = json_encode($sdata);
$mails = json_decode($json_data);
print_r($mails->query);

Ошибка, которую я получаю:

Notice: Trying to get property of non-object in C:\xampp\htdocs\yahoo\txtweb\yql.php       on line 21

person Community    schedule 11.08.2012    source источник
comment
Определить, что не удалось разобрать его. Какой код вы используете? Какой результат вы получаете? О каких ошибках сообщается?   -  person Quentin    schedule 11.08.2012
comment
Какие ошибки вы получаете (если есть)? Я просто скопировал это и вызвал json_decode, и он успешно вернул мне объект stdClass со всеми правильными данными.   -  person drew010    schedule 11.08.2012
comment
Если вы используете json_decode(), попробуйте запустить json_last_error(), чтобы увидеть, что не так. php.net/manual/en/function.json-last- ошибка.php   -  person A Person    schedule 11.08.2012
comment
У меня работает: codepad.org/ehd6Q9QB   -  person Rocket Hazmat    schedule 11.08.2012
comment
Вы смотрели, есть ли пробелы или неразрывные пробелы, которые можно было бы обрезать из строки, или что-то еще, что могло бы сделать строку прослушиваемой, когда они там?   -  person Hugo Dozois    schedule 11.08.2012
comment
Sushas, ​​если вы используете json_decode($json_data,true), вы можете получить данные в виде массива PHP.   -  person Buttle Butkus    schedule 11.08.2012
comment
Какой результат вы получите, если удалите строку $json_data = json_encode($sdata); и замените $json_data в следующей строке на $sdata?   -  person uınbɐɥs    schedule 12.08.2012
comment
когда я удаляю эту строку и пытаюсь выполнить $mails-›{'query'} Уловимая фатальная ошибка: объект класса stdClass не может быть преобразован в строку в C:\xampp\htdocs\yahoo\txtweb\yql.php в строке 21   -  person    schedule 12.08.2012
comment
Что такое $sdata? Привести пример.   -  person salathe    schedule 12.08.2012


Ответы (1)


См. этот URL: -

Анализ файла JSON с помощью PHP

см. также этот URL

http://collegewires.com/parsing-json-with-php/

или попробуй

Для итератора многомерного массива вы можете использовать RecursiveArrayIterator.

$jsonIterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator(json_decode($json, TRUE)),
    RecursiveIteratorIterator::SELF_FIRST);

foreach ($jsonIterator as $key => $val) {
    if(is_array($val)) {
        echo "$key:\n";
    } else {
        echo "$key => $val\n";
    }
}
person Abid Hussain    schedule 11.08.2012
comment
я добавил улучшить мой ответ, пожалуйста, посмотрите. - person Abid Hussain; 11.08.2012
comment
Выдает мне следующее: Неустранимая ошибка: необработанное исключение «InvalidArgumentException» с сообщением «Переданная переменная не является массивом или объектом, вместо этого используется пустой массив» в C:\xampp\htdocs\yahoo\txtweb\yql.php:22 Трассировка стека: # 0 C:\xampp\htdocs\yahoo\txtweb\yql.php(22): ArrayIterator-›__construct('{query:{coun...') #1 {main} добавлено в C:\xampp\htdocs\yahoo \txtweb\yql.php в строке 22 - person ; 12.08.2012
comment
Просто удалите двойное кодирование - см. ответ @Kaii. - person uınbɐɥs; 12.08.2012