JSON数据-在PHP中验证属性

JSON数据-在PHP中验证属性,php,json,schema,Php,Json,Schema,我试图针对大型JSON数据验证一个简单的模式。我只需要找到我在PHP代码中使用的属性是否存在于JSON数据中。我看过几个库,但它们似乎有些过分,因为它们甚至验证了数据类型,我只需要属性的存在 例如: 我使用的PHP变量:姓名、年龄、性别 JSON数据: { "Location": "10.2.00", "Name": "Foo", "Age": "30", "Race": "NA", "Gender": "Male" } 因此JSON中可能有额外的数据 如何检查PHP代码或

我试图针对大型JSON数据验证一个简单的模式。我只需要找到我在PHP代码中使用的属性是否存在于JSON数据中。我看过几个库,但它们似乎有些过分,因为它们甚至验证了数据类型,我只需要属性的存在

例如: 我使用的PHP变量:
姓名、年龄、性别
JSON数据:

{
  "Location": "10.2.00",
  "Name": "Foo",
  "Age": "30",
  "Race": "NA",
  "Gender": "Male"
}
因此JSON中可能有额外的数据


如何检查PHP代码或其他JSON模式中是否存在JSON变量?

如果只需要验证简单模式中的键是否存在,可以使用

定义简单模式(请记住,键区分大小写。)

解码大的JSON数据(确保使用
JSON\u Decode
的第二个参数来获取一个数组以进行比较。)

然后,使用

array\u flip
将简单模式的值转换为用于比较的键

$json = json_decode($large_json_data, true);

如果
$missing_keys
为空,则模式中的所有键都存在于大型JSON数据中。

因此,添加大小写不敏感:

$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()
    表示所有属性都存在

@不要惊慌,这是一个极好的解决方案。我看到的唯一不利的一面是区分大小写。无论如何,要使其不敏感?可以不区分大小写,但我认为使用array_diff_key是不可能的。您可能需要循环并将这两个键转换为一个常见的大小写。如果您知道大数据中的所有键都在某种情况下,那么可以事先将简单的模式键转换为这种情况。
$missing_keys = array_diff_key(array_flip($simple_schema), $json);
$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";
}