0

我正在使用 json 模式验证器来验证 nodejs 中的传入 json 数据包。我能够检查键值是否存在,还可以检查是否存在任何无效键。它工作正常。

这是我的 json 模式代码,

function testLoginJsonSchema() {
}

testLoginJsonSchema.loginRequestSchema = {
            type: 'object',
            properties: {
                uname: {
                    type: 'string',
                    required: true
                },
                password: {
                    type: 'string',
                    required: true
                }
            },
            "additionalProperties": false
        };

module.exports = testLoginJsonSchema;

但我需要检查密钥是否重复。它不适用于此代码。

有效的 json

 {
        "uname":"test@manaf.com",
        "password":"validPassword"

 }

无效的 json

  {
        "uname":"test@manaf.com",
        "password":"InvalidPassword",
        "password":"validPassword"

  }

我需要为无效的 json 请求生成错误消息“无效的 json 包”。怎么可能?

4

1 回答 1

0

JSON Schema 定义了对JSON 文档表达的数据结构的约束。所以在我们考虑 JSON Schema 之前,我们必须弄清楚如何解码 JSON 文档,这就是我们的问题:

根据RFC 7159(和更早的 RFC 4627) , JSON 文本不应有重复的键:

对象中的名称应该是唯一的。

解码此文档时的行为未定义(参见第 4 节中的第二段)。一些实现会将其视为无效 JSON 并发出警告,大多数会采用其中一个值(第一个或最后一个)并忽略其他值。没有可能的输入JSON.stringify()会产生重复的键。

如果您需要检查假定为 JSON 文档中的重复键,那么这应该在 JSON 解码步骤期间完成,甚至在它到达模式验证器之前。

于 2015-12-14T14:42:26.123 回答