Javascript 如何使用ajv模式验证验证值是否为double格式和/或类型?

Javascript 如何使用ajv模式验证验证值是否为double格式和/或类型?,javascript,postman,json-schema-validator,ajv,Javascript,Postman,Json Schema Validator,Ajv,我使用的是Ajv版本07 我试图使用ajv验证验证JSON响应体返回的属性值是否为postman中的类型和格式双精度,但是,我无法做到这一点。我试着在网上搜索,但还是没有找到任何关于它的信息 我已尝试键入以下内容: “类型”:“双” “格式”:“双精度” “类型”:“双” “格式”:“双精度” “类型”:“编号” “格式”:“双精度” 上述所有尝试均未成功,因为它们都会出现一条错误消息,说明: 错误:架构中使用了未知类型“double” 或 错误:架构中使用了未知格式“double”

我使用的是Ajv版本07

我试图使用ajv验证验证JSON响应体返回的属性值是否为postman中的类型和格式双精度,但是,我无法做到这一点。我试着在网上搜索,但还是没有找到任何关于它的信息

我已尝试键入以下内容:

  • “类型”:“双”

    “格式”:“双精度”

  • “类型”:“双”

    “格式”:“双精度”

  • “类型”:“编号”

    “格式”:“双精度”

上述所有尝试均未成功,因为它们都会出现一条错误消息,说明:

  • 错误:架构中使用了未知类型“double”

  • 错误:架构中使用了未知格式“double”
有人能帮我吗

模式

var Ajv = require ('ajv'),
ajv = new Ajv ({logger:console}),
expectedResponseSchema = 
{
    "items": {
        "required": [
            "payments"
     ],
        "properties": {
    "payments": {
                "items": {
                    "required": [
                        "amount"
    ]
        "properties": {
                        "amount": {
                            "$id": "#/items/properties/payments/items/properties/amount",
                            "type": "number",
                            "format": "double"
                        }
   }
  }
 }
}
}

邮差测试

var currentSchPmExpTest;

try{     
currentSchPmExpTest = ' expectedResponseSchema variable';
    pm.expect(ajv.validate(expectedResponseSchema, jsonData)).to.be.true;
pm.test('Test 1 - PASSED - expectedResponseSchema variable data matches schema returned by body response!', () => true);
} catch(e){
    pm.test('Test 1 - FAILED - Expected data does not match response body data!', () => {throw new Error(e.message + " in " + currentSchPmExpTest)});
}

身体反应


[
  {
    "payments": [
      {
        "amount": 2.200000045367898,

      }
    ]
  }
]


我不确定您从何处获取类型和格式,但根据(可能已过期)的,该类型不是有效的
类型

编辑:

在您的更新中,我建议将测试脚本更改为如下内容,以便检查架构的正确部分:

let schema = {
    "type": "array",
    "items": {
        "type": "object",
        "required": [
            "payments"
        ],
        "properties": {
            "payments": {
                "type": "array",
                "items": {
                    "type": "object",
                    "required": [
                        "amount"
                    ],
                    "properties": {
                        "amount": {
                            "type": "number",
                        }
                    }
                }
            }
        }
    }
}

pm.test("Check Schema", () => {
    pm.response.to.have.jsonSchema(schema)
}) 

如果您需要,也可以在此周围添加
try/catch
块。

我不确定您从何处获取类型和格式,但根据(可能已过期)的,该类型不是有效的
类型

编辑:

在您的更新中,我建议将测试脚本更改为如下内容,以便检查架构的正确部分:

let schema = {
    "type": "array",
    "items": {
        "type": "object",
        "required": [
            "payments"
        ],
        "properties": {
            "payments": {
                "type": "array",
                "items": {
                    "type": "object",
                    "required": [
                        "amount"
                    ],
                    "properties": {
                        "amount": {
                            "type": "number",
                        }
                    }
                }
            }
        }
    }
}

pm.test("Check Schema", () => {
    pm.response.to.have.jsonSchema(schema)
}) 


如果您需要,也可以在此周围添加
try/catch
块。

您的完整架构在应用程序中是什么样子的?您的测试脚本是什么样子的。这感觉像是信息的一半。@DannyDainton模式和邮递员测试添加了。@DannyDainton身体反应添加了。更新了我的答案,使您的测试更易于管理。我不知道这是否对值有帮助-您可以尝试使用
模式
并在其中添加一些正则表达式?我见过
multipleOf
number
一起使用,但我没有尝试过。不确定,但这是重复的吗?你的完整架构在应用程序中是什么样子的?你的测试脚本是什么样子的。这感觉像是信息的一半。@DannyDainton模式和邮递员测试添加了。@DannyDainton身体反应添加了。更新了我的答案,使您的测试更易于管理。我不知道这是否对值有帮助-您可以尝试使用
模式
并在其中添加一些正则表达式?我看到了
multipleOf
number
一起使用,但我没有尝试过。不确定,但这是的副本吗?是的,我也看到了这些信息。然后我对它做了更多的研究,看看是否有一种方法可以代替检查双精度格式,但没有成功。它不是有效的类型或格式,所以总是会给你同样的错误。你在做什么研究,你能提供一个链接到它说你可以使用double吗?这正是我一直试图弄清楚的,如果它允许或不允许的话。但如果没有,那么还有什么替代方法呢?我不知道你在验证什么——问题中没有任何东西告诉人们响应的价值是什么。你能用一个例子来更新回复正文吗?谢谢你的提示。然而,这仍然回答了我的问题:是否有可能检查一个值是否是双精度的?是的,我也看到了这个信息。然后我对它做了更多的研究,看看是否有一种方法可以代替检查双精度格式,但没有成功。它不是有效的类型或格式,所以总是会给你同样的错误。你在做什么研究,你能提供一个链接到它说你可以使用double吗?这正是我一直试图弄清楚的,如果它允许或不允许的话。但如果没有,那么还有什么替代方法呢?我不知道你在验证什么——问题中没有任何东西告诉人们响应的价值是什么。你能用一个例子来更新回复正文吗?谢谢你的提示。但是,这仍然回答了我的问题:是否可以检查值是否为双精度?