2017-07-12 25 views
-1

我找回了JSON,它將多個對象放置爲數組的值。檢查數組內物體的屬性是否存在

我需要檢測JSON中的「Error」屬性是否返回,但是在Error屬性不存在的情況下,我不想返回錯誤。

這是我得到的解碼JSON。 JSON能回來是這樣,但它可能不會:

JSON

[{"Error":"1050"}] 

我的PHP

$data = json_decode($json); 
print_r($data); 

返回:

Array 
(
    [0] => stdClass Object 
     (
      [Error] => 1050 
     ) 

) 
+3

到目前爲止您試過的任何代碼示例? –

+0

這是一個PHP問題,所以我們假設數據是JSON,但在PHP – Aknosis

+0

中訪問過,我測試了很多我刪除的內容,我會重新搜索。李對不起是它的JSON解碼 – Omar

回答

2

我認爲對於您的具體示例,您將使用$arr[0]->Error訪問錯誤,但json_decode中的assoc選項意味着它取決於您要求的json_decode要做的事情。

這意味着如果你做了$arr = json_decode($json, true),那麼你將訪問錯誤$arr[0]['Error'],因爲JSON將始終將對象解碼爲關聯數組。

這是使用JSON和PHP進行變異和混淆的可愛示例,您可能從PHP中的關聯數組開始,將其轉換爲JSON並返回並丟失關聯數組。只是要留意一下。

在PHP中,您可以使用[方括號]和具有->箭頭的對象屬性來訪問數組。它們不像JavaScript中的括號和點符號那樣可以互換。所以你總是需要留意你的數據結構是對象還是關聯數組。

至於測試,如果屬性格式存在,您使用isset

if(isset($arr[0]->Error)) { 
    // handle error 
} 

現在,我真的很討厭使用isset無處不在,所以我有一個效用函數:

function getProperty($object, $propertyName, $defaultValue = false) 
{ 
    $returnValue = $defaultValue; 

    if (!empty($object)) { 
     if (is_array($object)) { 
      if (isset($object[$propertyName])) { 
       $returnValue = $object[$propertyName]; 
      } 
     } else { 
      if (isset($object->$propertyName)) { 
       $returnValue = $object->$propertyName; 
      } 
     } 
    } 

    return $returnValue; 
} 

中這意味着我的代碼,我這樣做:

if(($error = getProperty($arr[0], 'Error')) === false) { 
    // process $error 
} 

...但是,這是承擔了總是想要聯合國初始值在大多數時間不存在時給予默認值。 (該函數非常大,因爲它也適用於對象和陣列)

+0

但是這樣,在JSON不返回這個Error屬性的機會中,我回來了。注意:未定義的屬性:stdClass :: $ Error - 我需要檢查它是否存在,但是如果我手動引用屬性爲Error I如果它不存在,則返回錯誤。 – Omar

+0

就是這樣,謝謝你! – Omar

-1
$someobject = json_decode($yourjsongoeshere); 

if(isset($someobject["Error"])){ 
    echo ($someobject["Error"]); 
} 
0

你可以使用json_decode用包含你的ret的變量請求JSON,然後使用array_key_exists檢查對象是否包含錯誤鍵。

array_key_exists("error", $jsonArray) 

類似的問題到How to check if an array element exists?看來。

+0

array_key_exists(「Error」,$ data);這不會返回任何內容 – Omar

+0

是變量$ data引用(以下示例)數組中的第一個對象(索引0)? $ jsonArray [0]應該返回stdClass對象 – Xamthi

+0

您需要將對象轉換爲數組。 –

0

從技術上講,您可以將對象轉換爲數組並使用array_key_exists()。這不是最優雅的解決方案,但它會起作用。

$json = '[{"Error":"1050"}]'; 

$j = json_decode($json); 


if (array_key_exists(0, $j)) { 

    if (array_key_exists('Error', (array)$j[0])) { 
     // It exists 
    } 
}