json lua 源码
时间: 2023-10-18 20:04:56 浏览: 42
以下是 Lua 的 JSON 解析和生成源码示例:
```lua
local JSON = {}
function JSON.encode(obj)
local jsonString = nil
if type(obj) == "table" then
local temp = {}
for k,v in pairs(obj) do
local key = type(k) == "number" and "[" .. k .. "]" or '["' .. k .. '"]'
if type(v) == "table" then
table.insert(temp, key .. " : " .. JSON.encode(v))
elseif type(v) == "string" then
table.insert(temp, key .. ' : "' .. v .. '"')
else
table.insert(temp, key .. " : " .. tostring(v))
end
end
jsonString = "{" .. table.concat(temp, ", ") .. "}"
elseif type(obj) == "string" then
jsonString = '"' .. obj .. '"'
else
jsonString = tostring(obj)
end
return jsonString
end
function JSON.decode(jsonString)
local obj = nil
local pos = 1
local function skipWhiteSpace()
while pos <= #jsonString do
local c = jsonString:sub(pos, pos)
if c == " " or c == "\t" or c == "\r" or c == "\n" then
pos = pos + 1
else
break
end
end
end
local function parseValue()
skipWhiteSpace()
local c = jsonString:sub(pos, pos)
if c == "{" then
obj = {}
pos = pos + 1
skipWhiteSpace()
while jsonString:sub(pos, pos) ~= "}" do
local key = parseValue()
skipWhiteSpace()
pos = pos + 1
skipWhiteSpace()
local value = parseValue()
obj[key] = value
skipWhiteSpace()
if jsonString:sub(pos, pos) == "," then
pos = pos + 1
skipWhiteSpace()
end
end
pos = pos + 1
elseif c == '"' then
pos = pos + 1
local startPos = pos
while jsonString:sub(pos, pos) ~= '"' do
pos = pos + 1
end
obj = jsonString:sub(startPos, pos - 1)
pos = pos + 1
else
local startPos = pos
while pos <= #jsonString and (jsonString:sub(pos, pos) ~= "," and jsonString:sub(pos, pos) ~= "}" and jsonString:sub(pos, pos) ~= "]") do
pos = pos + 1
end
obj = tonumber(jsonString:sub(startPos, pos - 1))
end
return obj
end
obj = parseValue()
return obj
end
return JSON
```
以下是 Lua 的 JSON 解析和生成库的使用示例:
```lua
local JSON = require("json")
-- 将 Lua table 转换为 JSON 字符串
local myTable = {
name = "Jack",
age = 25,
address = {
city = "Shanghai",
district = "Pudong"
}
}
local jsonString = JSON.encode(myTable)
print(jsonString) -- 输出 {"name" : "Jack", "age" : 25, "address" : {"city" : "Shanghai", "district" : "Pudong"}}
-- 将 JSON 字符串转换为 Lua table
local jsonString2 = '{"name" : "Peter", "age" : 30, "address" : {"city" : "Beijing", "district" : "Haidian"}}'
local myTable2 = JSON.decode(jsonString2)
print(myTable2.name) -- 输出 Peter
print(myTable2.age) -- 输出 30
print(myTable2.address.city) -- 输出 Beijing
```
以下是 Lua 的 JSON 解析和生成源码示例:
```lua
local json = require("cjson")
-- 将 Lua table 转换为 JSON 字符串
local myTable = {
name = "Jack",
age = 25,
address = {
city = "Shanghai",
district = "Pudong"
}
}
local jsonString = json.encode(myTable)
print(jsonString) -- 输出 {"name":"Jack","age":25,"address":{"city":"Shanghai","district":"Pudong"}}
-- 将 JSON 字符串转换为 Lua table
local jsonString2 = '{"name" : "Peter", "age" : 30, "address" : {"city" : "Beijing", "district" : "Haidian"}}'
local myTable2 = json.decode(jsonString2)
print(myTable2.name) -- 输出 Peter
print(myTable2.age) -- 输出 30
print(myTable2.address.city) -- 输出 Beijing
```
以上是 JSON 解析和生成在 Lua 中的简单示例。