Javascript 验证json以确保所有数组属性值都是相同的对象类型

Javascript 验证json以确保所有数组属性值都是相同的对象类型,javascript,json,Javascript,Json,我需要验证JSON,以确保如果任何属性值的类型为array,那么它必须具有相同的对象类型 例如,考虑应该接受的有效JSON的以下示例 { "key1": "val_1", "key_2": [{ "a": "b" }, { "c": "d" }] } 以下是无效的JSON: { "key1": "val_1", "key_2": [{ "a": "b" }, { "c": "

我需要验证JSON,以确保如果任何属性值的类型为array,那么它必须具有相同的对象类型

例如,考虑应该接受

的有效JSON的以下示例
{
    "key1": "val_1",
    "key_2": [{
        "a": "b"
    }, {
        "c": "d"
    }]
}
以下是无效的JSON:

{
    "key1": "val_1",
    "key_2": [{
        "a": "b"
    }, {
        "c": "d"
    }, {
        "f": 1
    }]
}
因为与前两个节点相比,
{“f”:1}
是不同的。前两个节点具有字符串类型的值,属性值为数值,因此应拒绝该属性值

我应该能够以这种方式检查和验证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;
}
函数返回类型匹配(arr,类型){
var r=[];
如果(type==未定义){type='String';}

对于(VaR i=0,ILN=AR.C.长度;IHI,欢迎使用堆栈溢出。注意,堆栈溢出是在编程时遇到的问题的具体答案,而不是代码编写服务。请您自己努力解决这个问题,并且一旦有了一些代码和特定问题就回来。考虑一下有帮助的文章。
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"
    }]
}
*/