You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JSON Schema中验证文件路径是否存在?

JSON Schema如何验证文件路径是否存在?

我正在编写JSON Schema,希望添加一个接收文件路径的字段,能否像$schema字段找不到Schema文件时显示错误那样,验证该文件路径是否存在?以下是我当前的Schema代码:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "file": {
      "type": "string",
      "pattern": "^(\\./|\\.\\./|https?://).*\\.json$",
      "description": "The path to another json file."
    }
  }
}

在实际使用时,若填写的文件不存在,希望能显示警告或错误,示例如下:

{
  "file": "../path/to/file.json"
}

文件路径未找到的错误提示


解答

首先明确:JSON Schema本身是纯数据结构验证标准,只负责校验数据的格式、类型、规则,不支持直接访问文件系统来验证路径是否存在。$schema字段的报错是JSON Schema解析器自身加载Schema文件时的行为,不属于Schema规则能定义的范畴。

要实现文件路径存在性验证,得靠额外的逻辑扩展,常见方案有两种:

1. 给JSON Schema验证工具添加自定义关键字

比如使用主流的验证库,可以自定义一个fileExists关键字,在验证函数里编写文件系统检查逻辑。示例代码如下:

const Ajv = require('ajv');
const fs = require('fs');
const path = require('path');

const ajv = new Ajv();
// 自定义fileExists关键字
ajv.addKeyword('fileExists', {
  type: 'string',
  validate: function(schema, data) {
    // 处理相对路径,以当前工作目录为基准
    const filePath = path.resolve(data);
    return fs.existsSync(filePath);
  },
  errorMessage: '指定的文件路径不存在'
});

// 你的Schema
const schema = {
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "file": {
      "type": "string",
      "pattern": "^(\\./|\\.\\./|https?://).*\\.json$",
      "fileExists": true,
      "description": "The path to another json file."
    }
  }
};

// 待验证的数据
const data = { "file": "../path/to/file.json" };
const validate = ajv.compile(schema);
const valid = validate(data);
if (!valid) console.log(validate.errors);

2. 在IDE中实现实时验证提示

如果是想在IDE(如VS Code)里获得类似$schema的实时错误提示,需要编写IDE扩展或者使用支持自定义验证的插件,将文件存在性检查的逻辑集成到IDE的JSON验证流程中。这类扩展可以监听JSON文件的变化,实时检查file字段对应的路径是否存在,并在编辑器中显示错误提示。

补充说明

你当前Schema中的pattern只能校验路径的格式是否符合要求(比如相对路径或HTTP URL、后缀为json),但无法验证文件实际是否存在,必须结合上述的额外逻辑才能实现需求。


内容的提问来源于stack exchange,提问作者Get Off My Lawn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:18:18