如何递归删除JSON Schema中所有required键?适配Helm场景
移除JSON Schema中所有嵌套的required属性(适配Helm Values子集场景)
我给Kubernetes Helm的Values文件写了一份JSON Schema,里面定义了不少必填属性。但Helm允许使用Values文件的子集——这些子集YAML会和基础配置合并,所以根本不需要包含所有必填键。可IntelliJ会因为子集缺少必填键报错,这个报错完全没必要理会。
我需要生成一份移除了所有required属性的Schema,而且Schema是多层嵌套结构,required可能藏在第9、10层,得支持递归处理,还要能在GitHub Action或Shell环境里直接运行。之前试了jq但没找到可行的写法。
解决方案
用jq的递归遍历功能就能搞定,核心是递归删除所有层级的required键。执行以下命令即可:
jq 'walk(if type == "object" then del(.required) else . end)' input-schema.json > output-schema.json
说明:walk函数会递归遍历JSON的每个节点,只要遇到对象类型的节点,就删除其中的required属性,其他类型的节点保持原样。
示例输入
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "blackbox": { "type": "object", "properties": { "enabled": { "type": "boolean" } }, "required": ["enabled"] } }, "required": ["blackbox"] }
示例输出
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "blackbox": { "type": "object", "properties": { "enabled": { "type": "boolean" } } } } }
内容的提问来源于stack exchange,提问作者jkroepke
相关产品推荐
相关产品推荐

