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

许可

公共

版本

  • liblaxjson ffi 绑定 2019-03-30 03:03:26
  • 使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-27 10:07:30
  • 使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-26 10:21:11
  • 使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-26 05:20:08
  • 使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-25 19:31:16
  • 使用 FFI 将 LuaJIT 绑定到 liblaxjson 的 Lua 绑定。Liblaxjson 是一个宽松的流式 JSON 解析器 C 库。 2019-03-23 10:57:49