javascript - 如何在嵌套对象/数组数据结构的任何级别定义确切的数据类型?
问题描述
我正在尝试定义一个“复杂”对象:
var tM = JSON.parse('{"version":"","series":[{"name":"","possModes":[],"instance":[{"date":"","mode":""}]}]}');
其中数组“实例”的所有项目都应该是类型的对象
{"date":"","mode":""}
并且数组“系列”的所有项目都应该是类型的对象
{"name":"","possModes":[],"instance":[{"date":"","mode":""}]}
问题是只有索引 [0] 的项目获得了正确的属性,而更高索引的项目是“未定义的”,所以我无法将它们设置为所需的值。
我也尝试过tM
明确定义,例如:
var Cinstance = new Object();
Cinstance.date = "";
Cinstance.mode = "";
var Cseries = new Object();
Cseries.name = '';
Cseries.possModes = [];
Cseries.instance = [new Object(Cinstance)];
var tM= new Object();
tM.version = "";
tM.series = [new Object(Cseries)];
并且还喜欢:
var tM = {series:
[{instance:
[{date:"",mode:""}
]
}
]
}
(这是一个简化为我的具体问题的版本)。
当然,它们最终都会得到相同的结果——只定义了索引 [0] 的项目。
解决方案
OP提供的数据结构...
{
"version": "",
"series": [{
"name": "",
"possModes": [],
"instance": [{
"date": "",
"mode": ""
}]
}]
}
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "My-Special-Schema-Or-Data-Structure-Title",
"description": "Whatever I have to say about my described structure",
"type": "object",
"properties": {
"version": {
"description": " ... ",
"type": "string"
},
"series": {
"description": " ... ",
"type": "array",
"minItems": 1,
"items": {
"description": " ... ",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"possModes": {
"description": " ... ",
"type": "array"
},
"instance": {
"description": " ... ",
"type": "array",
"minItems": 1,
"items": {
"description": " ... ",
"type": "object",
"properties": {
"date": {
"type": "string"
},
"mode": {
"type": "string"
}
},
"required": [
"date",
"mode"
]
}
}
},
"required": [
"name",
"possModes",
"instance"
]
}
}
},
"required": [
"version",
"series"
]
}
甚至可以从一个JSON Schema Generator开始。通过 OP 最初提供的数据结构,得到一个 JSON Schema 的坚实基础,然后可以继续剪裁。
推荐阅读
- mysql - 编辑 my.ini 后,MySQL 无法在 Windows 中打开
- linux - 怀疑用 DB2 创建连接字符串
- wordpress - 如何使用 AWS CDK 通过 AWS Fargate 容器配置 Wordpress
- nats.io - NATS 消息传递:导出问题
- python - Python QT5 - 多进程 OpenCV 网络摄像头和 Requests.Get
- r - 为什么我收到以下错误 - gsub("^(", x[1, ]) 中的错误:缺少参数 "x",没有默认值
- android - 提高 wrap_content height recyclerview 的性能
- fortran - 派生类型中的参数化过程
- android - objectbox 预填充数据库批量插入
- java - 使用 Gson 将带有嵌套 Map 的 java 类写入自定义 json 格式