2016-05-09 1 views
1

サンプルjsonがあります。その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); 
}); 
+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文字列であるかどうかをテストすることができます

異なる文字列で試してみてください。

Demo

編集:私はadditionnal機能を追加しました:

EDIT DEMO

+0

どのような場合に障害が発生したのかを知る必要があります – RSKMR

+0

@RSKMR警告またはコンソールメッセージを追加しますか?ここではhttps://jsfiddle.net/6n6woyyo/1/ – AshBringer

+0

名前のプロパティを確認する方法は空ですか? – RSKMR

0

コールバックが複数回呼び出されます、 "戻る" を追加してください:Node.jsの中のvalidate JSONについては

return callback(...); 

を、良いライブラリがあります:https://github.com/hapijs/joi

関連する問題