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