如何在PHP中解析JSON对象?如何检索此JSON对象的某些特定字段的值?

时间:2017-01-29 21:07:45

标签: php json laravel laravel-5

我在 PHP 以及 Laravel 框架中绝对是新的(我不知道Laravel是否为这类任务提供了一些实用工具类)。我来自 Java

所以我有以下问题:

进入一个类我执行一个REST Web服务调用,如下所示:

    $response = $client->get('http://localhost:8080/Extranet/login',
        [
            'auth' => [
                'dummy@gmail.com',
                'pswd'
            ]
        ]);

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

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

$ response-> getBody()包含返回的 JSON 对象,这是前一个 \ Log :: info()的输出

{
    "id":5,
    "userName":"Dummy User",
    "email":"dummy@gmail.com",
    "enabled":true
} 

所以我有以下问题:

1)究竟是什么返回 json_decode()函数?我真的无法理解,因为PHP没有强类型,我没有声明的返回类型。

这是方法签名:

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

并在相关文档中说 @return mixed 。什么exatly意味着混合

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())获得这些价值观。但我怎么能这样做呢?什么是更简洁的方法呢? Laravel fframework提供了一些实用工具吗?

TNX

2 个答案:

答案 0 :(得分:2)

为了更好地理解,让我们首先描述 - 什么是JSON? 它是一种在字符串中表示对象(数组,对象等)的方法。

  

1)究竟什么返回json_decode()函数?我真的不能   理解,因为PHP没有强类型,我没有声明   返回类型。这是方法签名:

     

函数json_decode($ json,$ assoc = false,$ depth = 512,$ options =   0)并且在相关文档中它表示@return混合。什么是繁琐的意思   混合

json_deocde将JSON字符串转换为原始"结构"它代表着。

@return mixed意味着json_decode的返回值可以是任何类型的变量。如果JSON代表一个数组 - 它将是一个数组类型,如果它代表一个对象 - 它将是一个对象类型。

  

2)无论如何主要问题是:我必须使用的内容   先前返回的JSON对象并将这些值放入相关的   像这样的数组的字段:

     

$ attributes = array(       ' ID' =>这里是我的JSON对象的id字段值,       '用户名' =>在这里我的JSON对象的电子邮件字段值',       '名称' =>这里是我的JSON OBJECT的userName字段值,       );

为了确保您的JSON代表哪种类型的变量,您可以使用var_dump(json_decode($json));。无论如何,它是一个类对象。

因此:

$object = json_decode($json);

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

答案 1 :(得分:1)

如果json字符串是一个对象(不是数组),它将返回一个对象(类型为stdClass)。混合意味着它可以是多个东西,所以如果它是一个json数组,你就得到一个数组。

最好的办法是使用json_decode,然后使用var_dump(或var_export)来查看实际获得的内容。