Lua JSON模式验证器

时间:2019-05-31 21:24:35

标签: json validation lua schema kong-plugin

我已经寻找了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'

 -- Note: do cache the result of schema compilation as this is a quite
 -- expensive process
 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 ':'

2 个答案:

答案 0 :(得分:0)

看起来generate_validator和myvalidator的参数是lua表,而不是原始的json字符串。您将要首先解析json:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.MaterialComponents.ActionBar"
    tools:menu="@menu/test_menu"/>

答案 1 :(得分:0)

好的,我认为rapidjason会有所帮助: 请参阅link 这是一个示例工作代码:

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