2017-01-29 3 views
0

Я абсолютно новый в PHP и более того в Laravel framework (я не знаю, предоставляет ли Laravel некоторый класс полезности для таких задач). Я пришел от Java.Как я могу разобрать объект JSON в PHP? Как я могу получить значения некоторых конкретных полей этого объекта JSON?

Так что у меня следующая проблема:

в класс я выполнить вызов к REST веб-сервиса, что-то вроде этого:

$response = $client->get('http://localhost:8080/Extranet/login', 
     [ 
      'auth' => [ 
       '[email protected]', 
       'pswd' 
      ] 
     ]); 

    $dettagliLogin = json_decode($response->getBody()); 

    \Log::info('response: '.(json_encode($dettagliLogin))); 

$ response-> getBody() содержит вернулся JSON объект, это выход из предыдущего \ Log :: Информация():

{ 
    "id":5, 
    "userName":"Dummy User", 
    "email":"[email protected]", 
    "enabled":true 
} 

Так у меня есть следующие проблемы:

1) Что именно возвращает json_decode() функцию? Я действительно не могу понять, потому что PHP не сильно типизирован, и у меня нет объявленного типа возврата.

Это метод подпись:

function json_decode($json, $assoc = false, $depth = 512, $options = 0) 

и в соответствующем документе он говорит @return смешан. Что означает exatly mixed?

2) Во всяком случае, основная проблема заключается в: Я должен использовать содержание предыдущего возвращенное JSON объект и поместить эти значения в соответствующем поле массива, как это:

$attributes = array(
    'id' => HERE THE id FIELD VALUE OF MY JSON OBJECT, 
    'username' => HERE THE email FIELD VALUE OF MY JSON OBJECT', 
    'name' => HERE THE userName FIELD VALUE OF MY JSON OBJECT, 
    ); 

Так что я думаю что мне нужно разобрать значение $ response-> getBody() или json_decode ($ response-> getBody()), чтобы получить эти значения. Но как именно я могу это сделать? Каким образом это сделать? Larvel fframework дает некоторую полезность для этого?

Tnx

+0

Там нет такого понятия, как "JSON объект" (даже если Java притворяется есть). [JSON] (https://en.wikipedia.org/wiki/JSON) - текстовое представление некоторой структуры данных. Его можно использовать для воссоздания структуры данных, используемой для ее создания. – axiac

+0

Самый быстрый способ понять, как это выглядит, только $ dettagliLogin = json_decode ($ response-> getBody()); 'dd ($ dettagliLogin);' Это выведет декодированную переменную JSON, чтобы вы могли видеть, что это такое. Это может быть объект, массив, число, зависит от ответа. – fureszpeter

+0

ответил ли мой ответ? –

ответ

2

Для лучшего понимания, давайте сначала опишем - что такое JSON? Это способ представления объектов (массивов, объектов и т. Д.) В строке.

1) Что именно возвращает функция json_decode()? Я действительно не могу понять, потому что PHP не сильно типизирован, и у меня нет объявленного типа возврата.Это метод подписи:

Функция json_decode ($ json, $ assoc = false, $ depth = 512, $ options = 0), а в соответствующем документе говорится, что @return mixed. Что означает exatly ?

json_deocde преобразует строку JSON в исходную «структуру», которую она представляет.

@return mixed означает, что возвращаемое значение json_decode может быть любым типом переменной. Если JSON представляет массив - это будет тип массива, если он представляет объект - это будет тип объекта.

2) Во всяком случае, основная проблема заключается в: Я должен использовать содержание предыдущих возвращаются объект JSON и поместить эти значения в связанном поле массива, как это:

$ атрибутов = массив ( 'id' => ЗДЕСЬ ИДЕНТИФИКАТОР ЗНАЧЕНИЯ МОИ ОБЪЕКТА JSON, 'username' => ЗДЕСЬ ЭТАП ПОЛЕВОГО ЗНАЧЕНИЯ МОЕЙ JSON OBJECT ', ' name '=> ЗДЕСЬ Имя пользователя FIELD VALUE OF MY JSON OBJECT, );

Чтобы убедиться, что тип переменной JSON представляет, вы можете использовать var_dump(json_decode($json));. Во всяком случае, это объект класса.

Поэтому:

$object = json_decode($json); 

$attributes = array(
    'id' => $object->id, 
    'username' => $object->email, 
    'name' => $object->userName, 
    ); 
1

Если json строка является объект (не массив) будет возвращать объект (типа stdClass). Смешанный означает, что это может быть несколько вещей, поэтому, если это был массив json, вы бы получили массив.

Лучше всего использовать json_decode, а затем var_dump (или var_export), чтобы узнать, что вы на самом деле получаете.

Смежные вопросы