【发布时间】:2019-11-26 19:11:54
【问题描述】:
这似乎是一种常见的乏味模式:
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) {
/* ... */
}
}
【问题讨论】:
-
完整的 JSON 模式似乎比我想要的要重一些,但我发现它有更简单的使用场景。但可能这里的一些答案中提出的 try/catch 方法仍然更简单。
标签: javascript json jsonschema