#php #arrays #json
#php #массивы #json
Вопрос:
Я играю с API Twitter и пытаюсь проанализировать вывод json. Однако каким-то образом я делаю что-то не так, и я не получаю то, что хотел бы получить.
В этом случае я пишу на PHP. Начал цикл через массив, и screen_name и text работают соответственно.
foreach ($statuses as $obj) {
$screen_name = filter_var($obj->user->screen_name, FILTER_SANITIZE_STRING);
$text = filter_var($obj->text, FILTER_SANITIZE_STRING);
$urls = filter_var($obj->entities->urls->url, FILTER_SANITIZE_URL);
}
вывод массива JSON:
array (
0 =>
stdClass::__set_state(array(
'created_at' => 'Fri Oct 07 15:31:01 0000 2016',
'text' => 'test',
'entities' =>
stdClass::__set_state(array(
'hashtags' =>
array (
0 =>
stdClass::__set_state(array(
'text' => '30Under30',
'indices' =>
array (
0 => 36,
1 => 46,
),
)),
),
'symbols' =>
array (
),
'user_mentions' =>
array (
),
'urls' =>
array (
0 =>
stdClass::__set_state(array(
'url' => 'https://Forbes.com',
'expanded_url' => 'https://twitter.com/i/web/status/784415744427687936',
'display_url' => 'twitter.com/i/web/status/7…',
'indices' =>
array (
0 => 117,
1 => 140,
),
)),
),
)),
'source' => 'Sprinklr',
'in_reply_to_screen_name' => NULL,
'user' =>
stdClass::__set_state(array(
'id' => 91478624,
'screen_name' => 'test',
'url' => 'http://Forbes.com',
'entities' =>
stdClass::__set_state(array(
'url' =>
stdClass::__set_state(array(
'urls' =>
array (
0 =>
stdClass::__set_state(array(
'url' => 'http://Forbes.com',
'expanded_url' => 'http://forbes.com',
'display_url' => 'forbes.com',
'indices' =>
array (
0 => 0,
1 => 22,
),
)),
),
)),
'description' =>
stdClass::__set_state(array(
'urls' =>
array (
0 =>
stdClass::__set_state(array(
'url' => 'http://Forbes.com',
'expanded_url' => 'http://Forbes.com',
'display_url' => 'Forbes.com',
'indices' =>
array (
0 => 28,
1 => 48,
),
)),
),
)),
)),
'protected' => false,
'notifications' => false,
)),
'geo' => NULL,
'lang' => 'en',
)),
)
Комментарии:
1. Было бы неплохо иметь пример того, что вы хотите в качестве результата. Я думаю, просто передайте второй параметр как true
json_decode($string, true)
. php.net/manual/en/function.json-decode.php2. Мне нужен первый
'url' => 'https://Forbes.com',
параметр. Я думаю, что это примерно в строке 32. Для меня это выглядит как путь entities-> urls-> url. Однако это не работает3.
urls
это массив, поэтому вам нужно$obj->entities->urls[0]->url
4. ah работает. Спасибо.
5. Но почему мне не нужно указывать номер массива в части $obj ?
Ответ №1:
Поскольку urls
это массив, вам нужно его проиндексировать.
$urls = filter_var($obj->entities->urls[0]->url, FILTER_SANITIZE_URL);