【问题标题】:Conditional attribute in jsonschema is missing in JsonDataJsonData 中缺少 jsonschema 中的条件属性
【发布时间】:2018-12-31 18:02:10
【问题描述】:

我有以下 JSON 架构

{
    "type": "object",
    "additionalProperties": true,   
    "if":
    {
        "properties":
        {              
            "battery":
            {
                "type": "object",
                "additionalProperties": false,
                "minLength":1,
                "properties":
                {
                    "cell_composition":
                    {
                        "type": "object",
                        "additionalProperties": false,
                        "properties":
                        {
                            "value":
                            {
                                "enum": ["lithium", "lithium_cobalt"]
                            }
                        }
                    }
                }
            }
        }
    } ,
    "then":
    {
        "required": ["number_of_lithium_ion_cells"]
    }  
}

下面是 JSON 数据

{
    "battery123":
    {
        "cell_composition":
        {
            "value": "lithium_polymer"
        }
    }
}

我得到以下错误

消息:

对象缺少必需的属性: number_of_lithium_ion_cells。架构路径: #/那么/需要

实际上当"battery" 属性存在时,它可以正常工作。

"battery" 属性不存在时,它应该给出上述错误。

我怎样才能添加上述条件,然后它将适用于上述两种情况。

【问题讨论】:

  • 抱歉,我不确定我是否理解您的期望。你能提供一个你希望验证成功的例子和一个你希望验证失败的例子吗?您问题的措辞目前含糊不清。我很确定在您更新问题后我将能够为您提供帮助! =]
  • 我想建议您添加一些计算机语言作为标签。可能是JavaScript?如果没有计算机语言作为标签,您的问题只会被少数回答者看到。
  • 感谢您的宝贵时间。你应该使用这个链接:jsonschemavalidator.net 选择架构草案版本 07.Put 提到的 jsonschema 和 json 数据然后你应该得到提到的错误
  • 我是 JSON Schema 规范核心团队的一员。这意味着我现在编写规范。我目前无法理解您要做什么。如果你能提供我所要求的,我可以提供帮助。
  • 我相信我知道你的问题的答案,但我不想在不确定你在问什么的情况下猜测。您没有正确解释“两种情况”是什么。请提供您要传递的 JSON 和您要失败的 JSON。

标签: jsonschema


【解决方案1】:

我已经用 JavaScript 检查了你的两个模式(见下面的片段),结果是:你的两个模式都完全没问题。您必须找到自己的错误,而不是在 JSON 模式中。

var jObj1 =
{
    "type": "object",
    "additionalProperties": true,   
    "if":
    {
        "properties":
        {              
            "battery":
            {
                "type": "object",
                "additionalProperties": false,
                "minLength":1,
                "properties":
                {
                    "cell_composition":
                    {
                        "type": "object",
                        "additionalProperties": false,
                        "properties":
                        {
                            "value":
                            {
                                "enum": ["lithium", "lithium_cobalt"]
                            }
                        }
                    }
                }
            }
        }
    } ,
    "then":
    {
        "required": ["number_of_lithium_ion_cells"]
    }  
}

var test1 = JSON.parse(JSON.stringify(jObj1));
console.log(test1);

var jObj2 =
{
    "battery123":
    {
        "cell_composition":
        {
            "value": "lithium_polymer"
        }
    }
}

var test2 = JSON.parse(JSON.stringify(jObj2));
console.log(test2);

【讨论】:

  • 请使用在线工具进行 jsonschema 验证 jsonschemavalidator.net。并将提到的 json 模式和 json 数据放入该验证器中,它将生成提到的错误。
猜你喜欢
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
相关资源
最近更新 更多