api7 / jsonschema

Pure Lua JSON schema validator for Lua/LuaJIT
https://www.apiseven.com/
Apache License 2.0
120 stars 28 forks source link

How do I use not keyword in Lua? #79

Open howiezhao opened 2 years ago

howiezhao commented 2 years ago

In jsonschema we have not keyword, but how can I use it in Lua?

For example, We have jsonschema:

"dependencies": {
  "field_2": { "not": { "required": ["field_3"] } },
  "field_3": { "not": { "required": ["field_2"] } }
}

How do we represent it in Lua, I try like below but it doesn't work:

dependencies = {
    field_2 = {
        ["not"] = {
            required = {
                "field_3"
            }
        }
    },
    field_3 = {
        ["not"] = {
            required = {
                "field_2"
            }
        }
    },
}

Can someone help me?

spacewander commented 2 years ago

It works for me:

#!/usr/bin/env resty

local schema = {
    type = "object",
    properties = {
        field_2 = {type = "integer", exclusiveMinimum = 0},
        field_3 = {type = "integer",  exclusiveMinimum = 0},
    },
    dependencies = {
        field_2 = {
            ["not"] = {
                required = {
                    "field_3"
                }
            }
        },
        field_3 = {
            ["not"] = {
                required = {
                    "field_2"
                }
            }
        },
    }
}
local jsonschema = require 'jsonschema'
local myvalidator = jsonschema.generate_validator(schema)
print(myvalidator({field_2 = 1, field_3 = 1}))
print(myvalidator({field_2 = 1}))

Run:

falsefailed to validate dependent schema for "field_2": value wasn't supposed to match schema
true