(电子商店)定义架构时如何使用“ patternProperties”

时间:2019-07-15 07:57:03

标签: json validation electron config jsonschema

我正在为我的电子应用程序使用一个名为electron-store的库

它具有验证配置数据的功能。

我希望要存储在配置文件中的值是一个字符串。我可以通过定义如下模式来实现:

const schema = {
    1: {
        type: 'string',
    },
    2: {
        type: 'string',
    },
    3: {
        type: 'string',
    },
    4: {
        type: 'string',
    },
};

const store = new Store({schema});

config.json文件中的数据:

{
   "1": "lorem epsum...",
   "2": "epsum lorem...",
   "3": "epsum epsum...",
   "4": "lorem lorem..."
}

问题是我有成百上千行这样的数据,所以如果我能定义的话,那就太好了

const schema = {
    [any_key_name]: {
        type: 'string',
    },
};

我认为我可以在定义架构时使用“ patternProperties”来实现它,但是我不知道该怎么做。请帮助我。

1 个答案:

答案 0 :(得分:1)

您似乎无法根据需要使用electron-store进行此操作。

医生说以下话:

  

您应该将架构定义为每个键均为名称的对象   数据的属性,每个值都是一个JSON模式,用于   验证该属性。

https://github.com/sindresorhus/electron-store#schema

这意味着根“模式”不是JSON模式。只有每个KEY的值都是JSON模式。

如果您想使用动态名称,我认为您需要将其嵌套在特定的键名下,并将其验证为单个对象,尽管这可能可能不是与商店合作。

对不起,我对electron-store并不特别熟悉。


如果您可以为整个商店提供完整的JSON模式...

您可以使用patternProperties。 如果您不需要检查密钥是否遵循任何特定的正则表达式,则可以使用additionalProperties,它将覆盖properties(如果存在)未检查的所有属性。

让我们看看规格:https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.5.6

  

“ additionalProperties”的值必须是有效的JSON模式。

     

此关键字确定子实例如何验证对象,   并且不会直接验证即时实例本身。

     

具有“ additionalProperties”的验证仅适用于子对象
  与“属性”中的任何名称都不匹配的实例名称的值,   并且不匹配“ patternProperties”中的任何正则表达式。

作为纯JSON模式,您将看到...

{
  "additionalProperties": {
    "type": "string"
  }
}

您可以使用https://jsonschema.dev轻松进行测试(链接为您提供了示例)