VSCode 1.31.1内置JSON Schema验证仅对数组首个元素生效问题咨询
问题诊断与修复
这个问题不是操作失误,而是你在JSON Schema里对数组items的写法误用了元组验证语法,导致VSCode的JSON验证只处理数组的第一个元素。
问题根源
在你的myschema.json中,foodItems的items字段写成了数组形式:
"items": [ {"$ref": "#/definitions/foodItem"} ]
根据JSON Schema Draft-07的规范,这种数组形式属于元组验证——它指定数组的第N个元素必须匹配数组中第N个schema定义。你这里只定义了第一个元素的schema,后面的元素没有对应的规则,所以VSCode不会对它们进行验证和提示。
而你实际需要的是列表验证:让数组的所有元素都遵循同一个schema规则,这时候items应该是一个对象,而非数组。
修复方案
修改myschema.json中foodItems的items字段,去掉外层的数组括号:
"foodItems": { "type": "array", "items": {"$ref": "#/definitions/foodItem"} }
验证效果
修改后重新打开myjson.json,鼠标悬停在Orange、Cherry对应的amount字段上时,都会显示对应的描述文本(比如"The current amount of oranges"),和第一个元素的行为完全一致。
补充说明
如果确实需要元组验证(比如数组第一个元素是字符串、第二个是数字),才会用数组形式的items,例如:
"items": [ {"type": "string"}, {"type": "number"} ]
但你的场景是所有数组元素都遵循同一个foodItem规则,所以用对象形式的items才是正确选择。
内容的提问来源于stack exchange,提问作者FlKo
相关产品推荐
相关产品推荐

