代码之家  ›  专栏  ›  技术社区  ›  Mahesha999

检查输入json数据中某个属性的值与其他属性的值

  •  1
  • Mahesha999  · 技术社区  · 11 年前

    我正在接受有关数据库表模式的信息。它包含有关表列的信息。因此,显而易见,这些列具有 name 类型的属性 string 。但是,这些名称不必来自预先选择的名称列表。它们可以是用户输入的任何内容。现在我还想接受表的唯一键,它可以是一个复合键,只包含用户输入的那些列。换句话说,唯一键可以由用户在json数据中提供的列组成。

    因此,从技术上讲,我需要的是:动态填充的字符串枚举(来自输入json数据),这将是表示唯一键的数组项的类型。因此,数组的每个元素都将是一个列名。

    例如下面的json数据

    "columns": 
    {
        "col1": "val1",
        "col2": "val2",
        "col3": "val3"
    },
    "uniquelKey": ["val1","val2"]
    

    有效,但

    "columns": 
    {
        "col1": "val1",
        "col2": "val2",
        "col3": "val3"
    },
    "uniquelKey": ["val1","val4"]
    

    无效,因为 val4 在中指定 uniqueKey 中不存在 columns 列表 这是否可以通过当前的json模式规范和实现实现?在这方面我没有找到任何方向。

    我当前的json模式如下:

    ...
    "attributes":
    {
        "type": "array",
        "items":
        {
            "type": "object",
            "properties": 
            {
                "name": {"type": "string"},
                ...
            },
            "required": ["name",...],
            ...
        }
    },
    "uniqueKey": 
    {
        ... ** here is where I have stuck ** ...
    }
    ...
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   Martijn Pieters    7 年前

    不,这不能用当前版本的JSON Schema完成。没有引用正在验证的数据中的值的机制。类似地,没有方法验证对象,其中包含属性 startDate endDate 哪里 开始日期 小于 实际结束 .

    有一个解决这一限制的建议,正在为未来的JSON Schema草案考虑。所以,你也许可以在未来做到这一点,但现在不行。

    请参阅JSON Schema规范讨论 issue 51: type enhancement: $data .