如何确保对象中的键是带有 jsonschema 的字符串

How to ensure that keys in object are strings with jsonschema

我需要一个 jsonschema 来验证 JSON,其中所有键都必须是字符串。所有键都是任意的。

例如这应该是有效的

{

    "123": "GET",
    "key2": "/mellons/and/strawberries",
    "arbitrary_key": {
        "SomeKey": "some data",
    },
}

虽然这不应该

{

    123: "GET",
    "key2": "/mellons/and/strawberries",
    "arbitrary_key": {
        "SomeKey": "some data",
    },
}

使用 patternProperties 验证无效,因为此正则表达式 "^.*$" 似乎匹配数字和字符串。

a={

    123: "GET",
    "key2": "/mellons/and/strawberries",
    "arbitrary_key": {
        "SomeKey": "some data",
    },
};
Object.keys(a) // this gives array of keys can assign check here

根据 JSON,对象键总是字符串(只看第一张图)。不过,某些解析器可能也允许将数字用作字符串。

由于 json 模式应该验证有效 json 文档的结构,它不会识别词汇格式错误的 json 字符串。这超出了 json 架构的范围。您也不应该混淆 JSON 和 javascript 对象。

因此,如果您真的确定要捕获这种格式不正确的 JSON,那么最好的办法可能就是选择具有严格模式的解析器。