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方法可能更简单。