Lua json格式验证器

我已经寻找了4天,但我没有找到为基于Lua的JSON模式编译程序提供支持的代码。我主要处理以下内容

但以上两者都不是很直截了当地使用。

在处理luarocks问题后,我终于让ljsonschema正常运行,但JSON语法看起来比正常的JSON结构不同-例如:等号代替冒号,键名没有双引号等等。

ljsonschema支持

{ type = 'object', properties = {
foo = { type = 'string' },
bar = { type = 'number' },},}

我需要的是:

{"type":"object",
"properties":{
"foo":{"type":"string"},
"bar":{"type":"number"}}}

使用rjson时,安装位置本身存在问题。尽管安装过程很顺利,但在运行Lua代码时它无法找到.so文件。此外,我找不到太多开发支持。

如果我遗漏了什么,请帮忙指导方向。 我有JSON模式和示例JSON,我只需要一些Lua代码来帮助编写程序。

这是为Kong CE编写自定义JSON验证插件。

更新: 我想让下面的代码使用ljsonschema工作:

local jsonschema = require 'jsonschema'

 -- 请注意:缓存模式编译的结果,因为这是一个相当耗费资源的过程
local myvalidator = jsonschema.generate_validator({
   "type":"object",
   "properties":{
   "foo":{"type":"string"},
   "bar":{"type":"number"}}})

print(myvalidator{"foo":"hello","bar":42})

但我收到错误:'}' expected (to close '{' at line 5) near ':'

点赞
用户7552
用户7552

看起来 generate_validator 和 myvalidator 的参数是 Lua 表,而不是原始的 JSON 字符串。你需要先解析 JSON:

> jsonschema = require 'jsonschema'
> dkjson = require('dkjson')
> schema = [[
>> { "type" : "object",
>> "properties" : {
>> "foo" : { "type" : "string" },
>> "bar" : { "type" : "number" }}}
>> ]]
> s = dkjson.decode(schema)
> myvalidator = jsonschema.generate_validator(s)
>
> json = '{ "foo": "bar", "bar": 42 }'
> print(myvalidator(json))
false   wrong type: expected object, got string
> print(myvalidator(dkjson.decode(json)))
true
2019-06-01 11:52:12
用户7707069
用户7707069

好的,我认为 rapidjason 来帮忙了: 请参考 链接 以下是一个可用的示例代码:

local rapidjson = require('rapidjson')

function readAll(file)
    local f = assert(io.open(file, "rb"))
    local content = f:read("*all")
    f:close()
    return content
end

local jsonContent = readAll("sampleJson.txt")
local sampleSchema = readAll("sampleSchema.txt")

local sd = rapidjson.SchemaDocument(sampleSchema)
local validator = rapidjson.SchemaValidator(sd)

local d = rapidjson.Document(jsonContent)

local ok, message = validator:validate(d)
if ok then
    print("json OK")
else
    print(message)
end
2019-06-03 15:48:09