Я искал более 4 дней, но мне не удалось найти большую поддержку кода для компилятора схемы json на основе lua. В основном я имел дело с
Но ни одно из вышеперечисленных не было прямым в использовании.
После решения проблем с luarocks я, наконец, заработал ljsonschema, но синтаксис JSON выглядит иначе, чем обычная структура JSON - например: равно вместо точки с запятой, нет двойных кавычек для имен ключей и т. д.
ljsonschema поддерживает
{ type = 'object', properties = {
foo = { type = 'string' },
bar = { type = 'number' },},}
Я требую :
{ "type" : "object",
"properties" : {
"foo" : { "type" : "string" },
"bar" : { "type" : "number" }}}
С rjson есть проблема с самим местом установки. Хотя установка проходит нормально, она никогда не может найти файл .so во время выполнения кода lua. Плюс не так много поддержки разработчиков, которую я мог найти.
Пожалуйста, помогите указать в правильном направлении, если я что-то упустил. У меня есть схема json и образец json, мне просто нужен код lua, чтобы написать вокруг него программу.
Это нужно для написания пользовательского плагина проверки JSON для Kong CE.
ОБНОВЛЕНО: Я хотел бы, чтобы приведенный ниже код работал с 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 ':'
@Nifim: см. Обновленный раздел. Я добавил пример кода, который пытаюсь заставить работать. Спасибо за проверку..

похоже, что аргумент для 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
Спасибо @glenn jackman, получаю эту ошибку, что мне не хватает: lua: /usr/local/share/lua/5.1/jsonschema/init.lua:161: неверный аргумент №1 для «загрузки» (ожидаемая функция, полученная строка) трассировка стека: [C]: в функции «загрузить» /usr/local/share/lua/5.1/jsonschema/init.lua:161: в функции </usr/local/share/lua/5.1/jsonschema/init.lua :160> (хвост): ? В myvalidator = jsonschema.generate_validator(s)
Извините, не знаю. Я тестировал с Lua 5.3
Хорошо, нет проблем - я тоже проверю с 5.3. Еще раз спасибо за проверку
Нашел решение, позволяющее избежать ошибок 5.1: использовать компилятор luajit вместо lua
Ок, думаю 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
У вас есть пример вашей попытки использования
ljsonschema?