2016-06-06 4 views
0

Чтобы создать новые записи в моей базе данных MongoDB, мне нужно проверить, определены ли все принятые сообщения JSON (null, "", {} и т. Д.). Как я могу сделать это простым и быстрым (общим) способом?Как закодировать и проверить все значения сообщения JSON в JavaScript?

База данных Модель:

var measurementSchema = {   
    "initStamp": Date, 
    "modStamp": Date, 
    "protocol": Number, 
    "engine": { 
     "amp": Number, 
     "volt": Number, 
     "temp": Number, 
     "pcbTemp": Number, 
     "rpm": Number 
    }, 
    "bms": {     
     "amp": Number, 
     "volt": Number, 
     "percent": Number, 
     "ampHours": Number, 
     "health": Number, 
     "temp": Number, 
     "lowVolt": Number, 
     "highVolt": Number, 
     "avgVolt": Number   
    }, 
    "mppt": [    {       
     "id": Number, 
     "batteryFull": Boolean, 
     "overheat": Boolean, 
     "noCharge": Boolean, 
     "lowVolt": Boolean, 
     "volt": Number, 
     "amps": Number, 
     "batteryVolt": Number, 
     "envTemp": Number     
    }  ], 
    "gps": {     
     "gpsQuality": Number, 
     "gpsTime": Date, 
     "satellitesUsed": Number, 
     "latitude": Number, 
     "nsIndicator": String, 
     "longitude": Number, 
     "ewIndicator": String, 
     "speed": Number, 
     "accuracy": Number, 
     "vector": {       
      "x": Number, 
      "y": Number, 
      "z": Number     
     }  
    } 
}; 
+0

Вы хотите, чтобы кто-то написал функцию, которая возвращает false, если хотя бы одно из свойств измеренияSchema не определено? Правильно ? –

+0

Вы просто хотите проверить, что каждая собственность существует или что она является правильным типом? например Нужно ли просто определять поле 'initStamp' или вы также хотите проверить, имеет ли он тип Date? –

+0

Проверка наличия свойства для моего приложения ... – Engo

ответ

1

Попробуйте что-то вроде этого!

function isJSONValid(obj) { 

    for (var key in obj) { 
    if (obj[key] !== null && obj[key] !== undefined) { 
     if (typeof obj[key] === "object") { 
     if (Object.keys(obj[key]).length === 0) { 
      return false; //invalid 
     } 
     } 
     if (Array.isArray(obj[key])) { 
     if (obj[key].length === 0) { 
      return false; //invalid 
     } 
     } 
     if (!isJSONValid(obj)) { 
     return isJSONValid(obj); 
     } 

    } else { 
     return false; //invalid 
    } 
    } 
    return true; //valid 
}; 

var canICreateNewRecords = isJSONValid(measurementSchema); 

EDIT: лучше ответьте на конкретные условия.

РЕДАКТИРОВАТЬ 2: отойти от использования typeof в том условии, что вы столкнулись с массивом.

+0

'typeof' никогда не возвращает' 'массив '' –

+0

ah good catch ... shoud использовать Array.isArray (obj [key]) вместо ... будет редактировать –

+0

Что происходит с вашим кодом, когда я Например, получить объект «bms»? – Engo

1

быстрый и простой способ проверить нуль, пустые строки или пустые массивы/объектов является stringify в JSON и проверить значения null, "" и {} или [].

var measurementSchema = { 
    "initStamp": null, 
    "engine": { 
    "amp": "", 
    }, 
    "mppt": [{}] 
}; 

/""|null|\{\}|\[\]/g.test(JSON.stringify(measurementSchema)) //=> true - a property is not defined 
+0

Можно ли выводить пустые поля с помощью этого кода? – Engo

+0

Как и в поле, которое пусто? Лучшее, что вы можете сделать, это это регулярное выражение, но оно имеет свои ограничения в зависимости от вложенных значений '' (\ w +) ": [\ {\ [] * (?:" "| null | \ {\} | \ [\]) ' –

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