Node+Json验证键嵌套数组

Node + Json validate key nested array

本文关键字:数组 嵌套 验证 Node+Json      更新时间:2023-09-26

我有示例json。在这个json中,我需要检查以下内容。

  1. 是否有效Json
  2. 名称键是必需的,不能为空(列表名称和项目名称)
  3. 项目数组长度需要大于5

我附上了我的代码,但它不起作用。我觉得这种方法不好。谁能告诉我正确的路吗。

var test = '{ "lists": [ { "items": [ { "name": "Curd0", "sequence": 3 }, { "name": "Curd1", "sequence": 2 }, { "name": "Curd2", "sequence": 1 }, { "name": "Curd3", "sequence": 4 }, { "name": "Curd4", "sequence": 10 }, { "name": "Curd5", "sequence": 9 }, { "name": "Curd6", "sequence": 8 }, { "name": "Curd7", "sequence": 7 }, { "name": "Curd8", "sequence": 6 }, { "name": "Curd9", "sequence": 5 } ], "name": "Curd Family", "status": "new", "created_by": 100036, "created_on": "2016-05-05T13:18:26.169Z" }, { "items": [ { "name": "Milk0", "sequence": 3 }, { "name": "Milk1", "sequence": 2 }, { "name": "Milk2", "sequence": 1 }, { "name": "Milk3", "sequence": 4 }, { "name": "Milk4", "sequence": 10 }, { "name": "Milk5", "sequence": 9 }, { "name": "Milk6", "sequence": 8 } ], "name": "Milk Family", "status": "new", "created_by": 100036, "created_on": "2016-05-05T13:18:44.504Z" }, { "items": [ { "name": "Water0", "sequence": 3 }, { "name": "Water1", "sequence": 2 }, { "name": "Water2", "sequence": 1 }, { "name": "Water3", "sequence": 4 }, { "name": "Water4", "sequence": 10 }, { "name": "Water5", "sequence": 9 }, { "name": "Water6", "sequence": 8 } ], "name": "Water Family", "status": "new", "created_by": 100036, "created_on": "2016-05-05T13:19:02.329Z" }, { "items": [ { "name": "Fruit0", "sequence": 3 }, { "name": "Fruit1", "sequence": 2 }, { "name": "Fruit2", "sequence": 1 }, { "name": "Fruit3", "sequence": 4 } ], "name": "Fruit Family", "status": "new", "created_by": 100036, "created_on": "2016-05-05T13:19:15.503Z" } ] }';

function Validate(data, callback) {
    for (index in lists) {
        if (!lists.index.hasOwnProperty('name')) {
            callback("Name cannot be empty");
        }
        var itemList = lists.index.items;
        if (itemList.length < 5) {
            callback("List need more than 5 lenth");
        }
        for ( i = 0; i < itemList.length; i++) {
            if (!itemList[i].hasOwnProperty('name')) {
                callback("Item Name cannot be empty");
            }
        }
    }
    callback(null);
}

Validate(test, function (err) {
    console.log(err);
});

每一个都可能是您所需要的:

function containsNameInLists(element) {
  return element.hasOwnProperty('name');
}
function containsNameInItems(element) {
    return element.items.every(containsKeyName);
}
function containsKeyName(element) {
    return element.hasOwnProperty('name');
}
function lengthSuperiorTo5(element) {
    return element.length > 5;
}
function itemsArrayLength(){
    return element.items.every(lengthSuperiorTo5);
}

您可以简单地使用JSON.parse 来测试您的字符串是否是有效的JSON字符串

试着玩这个字符串来测试不同的功能。

演示

编辑:我添加了附加功能:

编辑演示

回调将多次调用,请添加一个"return":

   return callback(...);

对于node.js中的validatejson,有一个很好的库:https://github.com/hapijs/joi