Задать вопрос
gogowq
@gogowq
Ozh domosh acha ozh

Как вывести данные из json в foreach,ошибка Warning: Illegal string offset?

У меня есть вот такой вот json, вставлю кусок для наглядности:
{
  "data": [
    {
      "type": "property",
      "id": "c0b6c16a-3002-48d3-a832-65311736d4da",
      "attributes": {
        "inline_address": "string",
        "public_address": "string",
ИТД...


я пытаюсь вывести public_address

Я получаю данные json посредством cURL и обрабатываю их вот так:

function get_allpr_property() {

$curl = curl_init();
curl_setopt_array($curl, [
  CURLOPT_URL => "https://street.co.uk/api/property-feed/sales/search",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer eyJ0WTlXI-37KbzbJsj19s0L6Q",
    "Content-Type: application/json"
  ],
]);

        $json = curl_exec($curl);
		//$json_obj = json_decode($json);
		$json_obj = json_decode($json, true); 
		//$json_obj = json_decode(json_encode($json),true);
		if ($json_obj) {
        //$property = $json_obj;
			$property = $json_obj['data'][0];

		}

	return $property ;
}


Ну и далее пробую получить нужное мне значение

<?php
 foreach($property as $value) {
   echo $value['attributes']['public_address'];
}
 ?>

но получаю ошибку - Warning: Illegal string offset
Пробовал разные варианты,это видно по закомментированным строкам,выводить пробовал $value->attributes->public_address но тоже что то не вышло.Либо на экране ничего нет,либо ошибка.
  • Вопрос задан
  • 172 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$property = $json_obj['data'][0];
После этого у вас в $property будет
[
  "type" => "property",
  "id" => "c0b6c16a-3002-48d3-a832-65311736d4da",
  "attributes": [
    "inline_address" => "string",
    "public_address" => "string"
  ]
]

Соответственно, в цикле foreach($property as $value) вы перебираете все значения данного массив и на первом же значении получаете "property"['attributes'].
Ответ написан
@russeljo
$data = [];
if ($json_obj) {
    $data = $json_obj['data'];

    $addresses = [];
    foreach($data as $value) {
       $addresses[] =  $value['attributes']['public_address'];
    }

    print_r($addresses);

}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы