定义 JSON 模式货币类型

Dón*_*nal 3 validation json jsonschema

我正在尝试为属性定义 JSON 模式

money: 12.12
Run Code Online (Sandbox Code Playgroud)

我主要关心的是应该允许最多 2 个小数位。我最初定义这个领域的尝试是

money: {
  type: 'number',
  minimum: 0,
  multipleOf: 0.01
}
Run Code Online (Sandbox Code Playgroud)

然而,由于浮点不精确,这失败了。例如,使用 tv4 验证器,数字 147.41 通过验证,但 147.42 失败。是否有另一种方法来定义最多只允许 2 个小数位的数字类型?

似乎“格式”属性的目的是实现这些类型的限制,但如果我像这样定义字段:

money: {
  type: 'number',
  format: 'currency',
  minimum: 0
}
Run Code Online (Sandbox Code Playgroud)

那么如何指定具有“货币”格式的字段最多只允许 2 个小数位?

小智 5

我不喜欢整数值的东西,我发现当涉及到百分比之类的东西时,当涉及到正确的数字舍入时,它并没有解决实际问题(这就是为什么其他语言有小数类型),并希望使用字符串提供这个非常简单的解决方案和模式:

"amount":{
    "type": "string",
    "pattern": "^(0|([1-9]+[0-9]*))(\.[0-9]{1,2})?$",
    "minLength": 1,
    "description": "A Monetary Amount",
    "examples": [
        "0",
        "0.00",
        "0.05",
        "19.95",
        "255.5",
        "120000"
    ]
}
Run Code Online (Sandbox Code Playgroud)

minLength如果你不想要它,你可以删除它。