aboutsummaryrefslogtreecommitdiff
path: root/tests/lua2json.lua
blob: ebe738087269b4fd4842eee4d7370f582711ee18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/env lua

-- usage: lua2json.lua [lua_file]
--
-- Eg:
-- echo '{ "testing" }' | ./lua2json.lua
-- ./lua2json.lua test.lua

local json = require "cjson"
local misc = require "cjson-misc"

function get_lua_table(s)
    local env = {}
    local func

    env.json = {}
    env.json.null = json.null
    env.null = json.null
    s = "data = " .. s

    -- Use setfenv() if it exists, otherwise assume Lua 5.2 load() exists
    if _G.setfenv then
        func = loadstring(s)
        if func then
            setfenv(func, env)
        end
    else
        func = load(s, nil, nil, env)
    end

	if func == nil then
		error("Invalid syntax. Failed to parse Lua table.")
	end
	func()

    return env.data
end

local t = get_lua_table(misc.file_load(arg[1]))
print(json.encode(t))

-- vi:ai et sw=4 ts=4: