2017-02-17 20 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.

Как проверить наличие переменных JSON в моем PHP-коде или другой схеме 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()
  • Проверьте, если разница is empty() означает, что все свойства существуют