javascript - 验证 json 以确保所有数组属性值具有相同的对象类型

标签 javascript json

我需要验证 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/

相关文章:

javascript - 在 javascript 中使用#href 约定

r - 在 R 中展平嵌套 JSON

javascript - 为 D3 解析 JSON 的问题

ruby-on-rails - 使用自定义格式别名 json 格式的 respond_to,这可能吗?

Python 将 xml 转换为 json 需要一个类似字节的对象

javascript - 单击图像时播放 youtube 视频,视频结束时返回图像

javascript - 选择次要前置元素

python - 使用Python解析JSON格式的日期

javascript - 从对象数组创建 PrimeNG TreeTable json

javascript - 阻止 jQuery 在解析 HTML 字符串时下载资源