util.json
Sometimes you need to deal with JSON objects. This library can serialize Lua objects to JSON and parse them back.
Example use
local json = require "util.json";
local rawdata = [[
{
"mydata": "Hello World"
}
]]
local parsed = json.decode(rawdata);
print(parsed.mydata); -- prints "Hello World";
print(json.encode({foo = "bar", baz = {1, 2, 3}}))
--> {"baz":[1,2,3],"foo":"bar"}
Reference
encode(data)
Returns a string representing the given data (usually, but not always, a table).
decode(string)
Returns the original data, given a string returned by encode(data).
Lua type mapping
Arrays
Empty Lua tables ({}
) will be
encoded as JSON objects, even if they were intended to be empty JSON
arrays ([]
.
As a workaround, use the util.array
library
for arrays, then they will always be encoded as JSON arrays, even if
empty.
When decoding, JSON arrays will be assigned the
util.array
metatable.
Objects
Lua tables support arbitrary types as both keys and values, while
JSON objects are limited to string keys, so a table like
{[true]="yes"}
can’t be represented in JSON.
util.json
employs a thing for this, it encodes such
table pairs into an array in the field "__hash"
:
{[true]=1,[false]=0}
→ {"__hash":[true,1,false,0]}
A table with both string keys and an array part will have its array
items encoded in a field called "__array"
:
{foo=1,bar=2,"lorem","ipsum"}
→ {"foo":1,"bar":2,"__array":["lorem","ipsum"]}