Javascript 检查JSON对象是否符合预期模式的最轻量级方法是什么?
这似乎是一种常见的乏味模式:Javascript 检查JSON对象是否符合预期模式的最轻量级方法是什么?,javascript,json,jsonschema,Javascript,Json,Jsonschema,这似乎是一种常见的乏味模式: function handleResponse(httpResponseBody) { const body = JSON.parse(httpResponseBody); if (body.someField && body.someField.length >= 5 && body.someField[4].otherField && body.someField[
function handleResponse(httpResponseBody) {
const body = JSON.parse(httpResponseBody);
if (body.someField &&
body.someField.length >= 5 &&
body.someField[4].otherField &&
body.someField[4].otherField.finalField) {
/* ... do something with finalField ... */
}
}
有点做作,但关键是如果您只是要通过手术访问对象的某个部分,并且希望最低限度地验证该部分是否按预期结构,那么如何避免像这样的样板验证逻辑,而不必对主体进行完整的JSON模式验证?一些轻量级的东西,概念上非常简单:
function handleResponse(httpResponseBody) {
const body = JSON.parse(httpResponseBody);
if (validate(body, '{ someField[>=5].otherField.finalField }') {
/* ... safe to access body.someField[4].otherField.finalField directly ... */
}
}
或者可能:
function handleResponse(httpResponseBody) {
const body = JSON.parse(httpResponseBody);
const finalField = access(body, '{ someField[4].otherField.finalField }');
if (finalField) {
/* ... */
}
}
最简单的方法是简单地将其包装在try/catch块中:
var data={body:{someField:[0,0,0,0,{otherField:{finalField:'test'}]};
试一试{
var finalField=data.body.someField[4].otherField.finalField;
控制台日志(finalField);
}捕获(e){
console.error('Invalid');
}
试一试{
var finalField=data.body.someField[7].otherField.finalField;
控制台日志(finalField);
}捕获(e){
console.error('Invalid');
}
我不知道您的设计是什么,但如果这是对象的预期格式,只需将您的逻辑放在一个try-catch块中即可。为后代解答。基于当前的TypeScript并作为Babel插件提供
您可以使用可选的链接
const finalField=body.someField?[4]?.otherField?.finalField;
如果(最终字段){
/*…对finalField做点什么*/
}
关于完整JSON模式的内容似乎比我想要的要重一些,但我发现它有更简单的使用场景。但这里的一些答案中提出的try/catch方法可能更简单。