2014-09-20 65 views
0

我從REST的API獲取JSON數據JSON值如下:檢索PHP

//manipute json 

{ 
    "email": "[email protected]", 
    "phone": "123456789", 
    "address": { 
    "line1": "2/15 street", 
    "line2": "Lonsdale", 

    }, 

    "extrafields": [ 
    { 
     "key": "firstname", 
     "value": "Robert" 
    }, 
    { 
     "key": "lastname", 
     "value": "Allen" 
    }, 

    ], 

} 

$obj=json_decode($output); //$output the retrieved JSON which is decoded in php 

// Code below works fine to get the "email" value 
    $s = $obj->{'email'}; 

// Code below works fine to get the line1 of "address" 
    $s = $obj->address->{'line1'}; 

請幫助我的代碼來檢索的關鍵=「名字」值

回答

-1

您可以使用json_decode( )來檢索數據陣列

$array = json_decode($output, true); 

當你可以使用:

echo $array['email']; // output: [email protected] 
echo $array['extrafields'][0]['key']; //output firstname 

或者反對:

$object = json_decode($output); 

echo $object->email; // output: [email protected] 
echo $object->extrafields[0]->key; //output firstname 
+0

這將讀取第一個額外字段的密鑰,而不是使用密鑰'firstname'的值。他們巧合的是一樣的,但假設這樣的事情是不可靠的。 – GolezTrol 2014-09-20 17:20:15

0

太糟糕了,多餘的字段被存儲在這種方式,而不是:

extrafields { 
    "firstname": "Robert", 
    "lastname": "Allen" 
} 

那會更有意義,你可以輕鬆地閱讀,如附加字段所以:

$firstname = $obj->extrafields->firstname; 

但是...

在你的情況下,它也是可能的,但你需要一個循環才能做到這一點。

$extrafields = $obj->extrafields; 

$firstname = ''; 
foreach ($extrafields as $extrafield) 
{ 
    if ($extrafield->key == 'firstname') 
    { 
    $firstname = $extrafield->value; 
    break; 
    } 
} 

嚴格,你不需要在這個特定的情況下,循環,但沒有保證你名字將永遠是第一個加場。所以爲了安全起見,你必須檢查鑰匙。