node.js - node.js - 检查JSON值是否被定义的更好方法?

我使用一个API调用来返回JSON数据,然后我把它写到一个模型,如果值不存在,我得到一个错误,所以我必须首先检查它是否有效,是否有比为每个不同的值编写自定义验证更好的方法?


const agentName = (record.brokers && record.brokers.length) && record.brokers[0].agent;


const agentEmail = (record.brokers && record.brokers.length && record.brokers[0].emails && record.brokers[0].emails.length) && record.brokers[0].emails[0];



我还尝试了这个,但它不能工作:


const email = (typeof record.brokers[0].emails[0] !== 'undefined') && record.brokers[0].emails[0];



谢谢

时间:

object-path,它可以处理你需要的,甚至更多。

其中一个快捷方式,有点奇怪但很有用,使用||,并生成空白对象/数组。


const agentName = ((record.brokers || [])[0] || {}).agent;


const agentEmail = (((record.brokers || [])[0] || {}).emails || [])[0];



最喜欢使用lodash_.get是你需要的。


_.get(record, 'brokers.0.agent');


_.get(record, 'brokers.0.emails.0');



try/catch块?

而不是手动验证每个字段,将它视为有效,直到引发异常。


var valid = true;


try {


 var agentName= record.brokers[0].agent;


 var agentEmail = record.brokers[0].emails[0];


 valid = false;


} catch(err) {


 console.log("Invalid record"); 


}



if (valid) {


 // continue processing


}



你可以用lodash,它是一个实用库,主要用于这个目的。你的冗长代码可以缩短为以下代码


let _ = require('lodash')


// this will return undefined if it agent name is not present. Thus helps it to write short conditions.


const agentName = _.get(record, ['brokers', 0 , 'agent'])


// similarly this will also help you to write short and better conditions.


// you can also use third parameters for defaults.


const agentEmail = _.get(record, ['brokers', 0, 'emails', 0])


// you can use something like this 



if (agentEmail) //for handling the not null condition 


{


/* your logic here */


}



...