2016-05-09 2 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, просто используя JSON.parse

Попробуйте сыграть со строкой, чтобы протестировать различные функции.

Demo

EDIT: Я добавил additionnal функции:

EDIT DEMO

+0

Мы должны знать, к какому случаю отказа, какое сообщение – RSKMR

+0

@RSKMR добавить предупреждение или консольное сообщение? здесь https://jsfiddle.net/6n6woyyo/1/ – AshBringer

+0

Как проверить, что свойство name пусто или нет? – RSKMR

0

Обратный вызов будет вызывать несколько раз, пожалуйста, добавьте "возврат":

return callback(...); 

Для валидации в формате JSON Node.js есть хорошая библиотека: https://github.com/hapijs/joi

Смежные вопросы