2016-05-09 41 views
1

我有示例json。在那個JSON中,我需要檢查以下事情。Node + 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); 
}); 
+0

並JSON的架構可以幫助您? http://json-schema.org/另請參閱https://www.npmjs.com/package/jsonschema –

回答

1

every可能是你需要的東西:

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字符串,只需使用JSON.parse

試着玩字符串來測試不同的功能。

Demo

編輯:我已經添加了其它附加功能:

EDIT DEMO

+0

我們應該知道哪些情況失敗哪些消息 – RSKMR

+0

@RSKMR添加警報或控制檯消息?這裏https://jsfiddle.net/6n6woyyo/1/ – AshBringer

+0

如何檢查名稱屬性是否爲空? – RSKMR