我需要验证 JSON 以确保如果任何属性值是数组类型,那么它必须具有相同的对象类型。
例如,考虑以下应该接受的有效 JSON 示例
{
"key1": "val_1",
"key_2": [{
"a": "b"
}, {
"c": "d"
}]
}
以下是无效的 JSON:
{
"key1": "val_1",
"key_2": [{
"a": "b"
}, {
"c": "d"
}, {
"f": 1
}]
}
因为 {"f": 1}
与前两个节点相比不同。前两个节点具有字符串类型的值,而“f”属性值为数字...因此应该拒绝它。
我应该能够以这种方式检查和验证 JSON 中的任何数组属性。
在客户端 JavaScript 上实现此功能的最佳方法是什么?
最佳答案
比较对象数组的函数,返回每个值属于所选类型的所有对象
function returnTypeMatched(arr,type){
var r = [];
if(type === undefined){type = 'String';}
for(var i=0,ilen=arr.length;i<ilen;i++){
var o = {},
item = arr[i],
keys = Object.keys(item);
for(var j=0,jlen=keys.length;j<jlen;j++){
var key = keys[j],
value = item[key];
if(arr[i][keys[j]].constructor.name === type){
o[key] = value;
}
}
if(Object.keys(o).length > 0){r.push(o);}
}
return r;
}
就你的情况
var myObject = {
"key1": "val_1",
"key_2": [{
"a": "b"
}, {
"c": "d"
}, {
"f": 1
}]
},
myKeys = Object.keys(myObject);
for(var i=0,ilen=myKeys.length;i<ilen;i++){
var key = myKeys[i],
value = myObject[key];
if(value.constructor.name === 'Array'){
var firstKeyType = value[0][Object.keys(value[0])[0]].constructor.name;
myObject[key] = returnTypeMatched(value,firstKeyType);
}
}
console.log(myObject);
/* Returns
{
"key1": "val_1",
"key_2": [{
"a": "b"
}, {
"c": "d"
}]
}
*/
关于javascript - 验证 json 以确保所有数组属性值具有相同的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51371312/