2017-02-17 69 views
0

我試圖驗證一個簡單的模式對大型JSON數據。我只需要找到我的PHP代碼中使用的屬性是否存在於JSON數據中。我已經看過幾個庫,但它們看起來過於矯枉過正,因爲它們甚至驗證了數據類型,我只需要存在屬性。JSON數據 - 驗證PHP中的屬性

例如: PHP變量使用:name, age, gender JSON數據:

{ 
    "Location": "10.2.00", 
    "Name": "Foo", 
    "Age": "30", 
    "Race": "NA", 
    "Gender": "Male" 
} 

因此,有可能是JSON額外數據。

如何檢查我的PHP代碼或其他JSON模式中是否存在JSON變量?

回答

0

如果您只需驗證簡單模式中的密鑰是否存在,則可以使用array_diff_key

定義的簡單模式(請記住,鍵是區分大小寫的。)

$simple_schema = ['Name', 'Age', 'Gender']; 

解碼你的大JSON數據(一定要使用的json_decode第二個參數,以獲得比較數組)。

$json = json_decode($large_json_data, true); 

然後使用array_diff_key獲得差異。

$missing_keys = array_diff_key(array_flip($simple_schema), $json); 

array_flip將簡單模式的值轉換爲用於比較的鍵。

如果$missing_keys爲空,那麼架構中的所有鍵都存在於大JSON數據中。

+0

@不要驚慌這是一個美麗的解決方案。唯一不利的一面是我看到的是區分大小寫。無論如何,使不敏感? – user3704920

+0

它可以做到不區分大小寫,但我認爲這不可能與array_diff_key。您可能需要循環並將這兩個鍵轉換爲常見的情況。如果您知道大數據中的所有密鑰都處於特定情況下,則可以事先將簡單模式密鑰轉換爲該情況。 –

0
與相加的情況下不敏感的

所以:

$props = array('name', 'age', 'gender'); 
$array = array_map('strtolower', array_keys(json_decode($json, true))); 

if(empty(array_diff($props, $array))) { 
    echo "All properties exist"; 
} 
  • 使用小寫的屬性名稱的數組
  • 獲取從JSON鍵和映射到strtolower()
  • 檢查的區別是empty()這意味着所有屬性