javascript - 检查 JSON 对象是否符合预期模式的最轻量级方法是什么?
问题描述
这似乎是一种常见的乏味模式:
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 ... */
}
}
有点做作,但关键是如何避免像这样的样板验证逻辑,如果您只是要通过手术访问对象的某些部分并希望最小化验证该部分的结构为预期的?轻量级的东西,概念上很简单:
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) {
/* ... */
}
}
解决方案
为子孙后代解答。基于https://github.com/tc39/proposal-optional-chaining并在当前的 TypeScript 和 Babel 插件中可用。
您可以使用可选链接。
const finalField = body.someField?.[4]?.otherField?.finalField;
if (finalField) {
/* ... do something with finalField ... */
}
推荐阅读
- primefaces - 使用 p:selectOneMenu 时出错
- python - 如何限制 Emcee 采样器可以选择的值?
- powershell - Powershell:逻辑运算符 - 或无法按预期工作
- python - Python复杂选择查询TypeError:字符串格式化期间并非所有参数都转换
- android - 如何将字符串从共享首选项转换为 MutableList
对在kotlin中绘制折线? - regex - 匹配范围(1 到 99)整数的正则表达式和小数的 xx.xx
- python - Python:如何在其他类别之间分配“杂项”总数
- angular - 如何将 DropList 数据绑定到 Observable
- .net - 使用 tf.exe 通过命令行签入解决方案
- terraform - 使用工作区时的全局资源