lua-laxjson
liblaxjson ffi 绑定
$ opm get sjnam/lua-laxjson
lua-laxjson
使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。
liblaxjson 库是使用 C 语言编写的宽松流式 JSON 解析器。您无需在解析之前将整个 JSON 字符串缓冲到内存中。
用法
``lua -- name: ctan_packages.lua -- run "resty ctan_packages.lua"
local ffi = require "ffi" local laxjson = require "laxjson" local requests = require "resty.requests"
local on_arr, count = false, 0
local laxj = laxjson.new { on_begin = function (ctx, jtype) if jtype == laxjson.LaxJsonTypeArray then on_arr = true elseif on_arr then count = count + 1 end return laxjson.LaxJsonErrorNone -- 0 end, on_end = function (ctx, jtype) if jtype == laxjson.LaxJsonTypeArray then on_arr = false end return laxjson.LaxJsonErrorNone end }
local url = "https://ctan.org/json/2.0/packages" local r, err = requests.get(url) if not r then print(err) return end
local chunk local ok, l, c, err while true do chunk, err = r:iter_content(2^13) -- 以 8K 字节为单位读取 如果没有块,则如果 err == "eof" 则 ok, l, c, err = laxj:lax_json_eof() 如果没有 ok,则打印("行: "..l.." 列: "..c..", "..err) 否则打印(err) 结束 break end ok, l, c, err = laxj:lax_json_feed(#chunk, chunk) 如果没有 ok,则打印("行: "..l.." 列: "..c..", "..err) break end end
if ok then print("CTAN 有 "..count.." 个包。") end
laxj:free() ``
安装
要安装 lua-laxjson
,您需要首先安装 liblaxjson,并使用共享库。然后,您可以将 laxjson.lua
放置到您的 Lua 库路径中进行安装。
方法
new
语法: laxj = laxjson.new(obj)
创建 laxjson 上下文。
free
语法: laxj:free()
销毁 laxjson 上下文。
feed
语法: ok, line, column, err = laxj:feed(size, buf)
使用 size
字节将字符串馈送到解析器。
eof
语法: ok, line, column, err = laxj:eof()
检查 EOF。
parse
语法: ok, line, column, err = laxj:feed(json_file, size)
解析 json 文件。json 文件以 size
字节为单位读取。
作者
Soojin Nam jsunam@gmail.com
许可
公有领域
作者
Soojin Nam
许可
公共
版本
-
sjnam/lua-laxjson 0.3.5liblaxjson ffi 绑定 2019-03-30 03:03:26
-
sjnam/lua-laxjson 0.3.4使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-27 10:07:30
-
sjnam/lua-laxjson 0.3.3使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-26 10:21:11
-
sjnam/lua-laxjson 0.3.2使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-26 05:20:08
-
sjnam/lua-laxjson 0.3.0使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-25 19:31:16
-
sjnam/lua-laxjson 0.2.8使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-23 10:57:49