JSON Schema引用解析错误解决及PowerShell校验JSON方法问询
引用解析报错解决方法
报错的根本原因是你使用的在线JSON Schema校验工具无法解析Schema中配置的相对路径外部引用,工具运行的虚拟服务环境中不存在process/process.schema.json、data/data.schema.json对应的文件资源。可以按照以下方案解决:
- 方案1:临时在线校验场景,直接内嵌外部Schema内容。将
process.schema.json、data.schema.json的完整Schema内容直接替换当前Schema中对应的$ref字段部分,无需保留外部引用结构即可直接在校验工具中完成校验。 - 方案2:保留外部引用结构的场景,将所有Schema文件部署在同一可公网访问的HTTP服务路径下,将
$ref的取值修改为文件的完整HTTP访问路径,在线工具即可正常拉取到引用的Schema完成解析。 - 方案3:使用本地校验工具进行校验,只要保证本地的Schema目录结构和你写的相对路径匹配,即可正常解析引用,无需修改Schema内容。同时注意检查路径的大小写,多数Schema校验工具对路径大小写敏感。
PowerShell实现JSON与JSON Schema校验的方法
PowerShell没有内置JSON Schema校验能力,需要借助Newtonsoft.Json.Schema(Json.NET Schema)库完成校验,操作步骤如下:
- 先安装依赖库,可以通过NuGet安装
Newtonsoft.Json.Schema包,也可以直接下载对应版本的Newtonsoft.Json.dll和Newtonsoft.Json.Schema.dll文件存放到本地。 - 使用以下脚本完成校验,注意替换对应的文件路径:
# 加载依赖程序集,替换为你本地的dll实际存储路径 Add-Type -Path "C:\libs\Newtonsoft.Json.dll" Add-Type -Path "C:\libs\Newtonsoft.Json.Schema.dll" # 加载JSON Schema文件 $schemaPath = "C:\schemas\your_main_schema.json" $schemaContent = Get-Content -Path $schemaPath -Raw $schema = [Newtonsoft.Json.Schema.JSchema]::Parse($schemaContent) # 加载待校验的JSON数据文件 $jsonDataPath = "C:\data\to_validate.json" $jsonContent = Get-Content -Path $jsonDataPath -Raw $jsonObj = [Newtonsoft.Json.Linq.JObject]::Parse($jsonContent) # 执行校验 $validationErrors = $null $isValid = $jsonObj.IsValid($schema, [ref]$validationErrors) # 输出结果 if ($isValid) { Write-Host "JSON数据校验通过" -ForegroundColor Green } else { Write-Host "JSON数据校验失败,错误详情:" -ForegroundColor Red $validationErrors | ForEach-Object { Write-Host "错误路径:$($_.Path),错误描述:$($_.Message)" } }
如果你的Schema包含相对路径的外部引用,需要在解析Schema时配置根路径:
# 配置Schema解析设置,指定外部引用的根目录 $settings = New-Object Newtonsoft.Json.Schema.JSchemaReaderSettings $settings.BaseUri = New-Object System.Uri("C:\schemas\") $schema = [Newtonsoft.Json.Schema.JSchema]::Parse($schemaContent, $settings)
内容的提问来源于stack exchange,提问作者Prateek Porwal
相关产品推荐
相关产品推荐

