PHP — извлечение первого элемента строки json без преобразования в массив

#php #json

#php #json

Вопрос:

У меня есть строка json, которую я в настоящее время проверяю следующим образом:

 $playedOn = $query -> data -> artist -> services_played_on
  

Теперь я хочу получить первый элемент этого services_played_on, но не уверен, как это сделать.. Если бы это был массив, я бы просто выполнил $query[data][artist][services_played_on][0], но по разным причинам это испортило бы другой код, который у меня есть. У кого-нибудь есть идеи, как я могу это сделать, используя -> обозначения?

——РЕДАКТИРОВАТЬ——

Спасибо за ваши ответы, но то, что мне было нужно, это:

 $playedOn = $query -> data -> artist -> services_played_on[0]
  

(Я пока не могу отправить это в качестве ответа, поскольку я «новый» пользователь)

Комментарии:

1. В чем дело с just $tmp = json_decode($query, true); $tmp['data']['artist']['services_played_on'][0]; unset($tmp); ?!

2. Как выглядит JSON, вы уверены services_played_on , что это еще не массив?

3. Я должен согласиться с другими. Почему вы не хотите декодировать массив json? Это не имеет особого смысла и потребует гораздо более сложной операции.

Ответ №1:

Просто сначала расшифруйте JSON.

 $jset = json_decode($json, true);
echo $jset["data"]["artist"]["services_played_on"][0];
  

Комментарии:

1. @tiswas: Смотрите мой комментарий выше. Нет веской причины не декодировать его первым. В противном случае вам придется взаимодействовать со строковым представлением, что делает все несравненно более сложным.

Ответ №2:

Я не вижу вашей проблемы. Если это JSON, просто десериализуйте его в PHP, как сказал @Marcel.

Если вы хотите, чтобы результатом был JSON, просто сериализуйте его обратно.

Пример:

 $json = '[ {"a":1} , {"d":3} , {"b":2} ]';

$data = json_decode( $json );

$new = json_encode( $data[1] ); // $new is now '{"d":3}'
  

Поскольку ваш вопрос довольно неоднозначен, я не уверен, хотите ли вы, чтобы результат был закодирован в формате JSON, ИЛИ вы хотите разделить строку по-своему.