如何在lua脚本中读取来自网站的json文件?

基本上,我一直使用这段代码从Web API中读取json文件,在bash中使用jq包非常容易。

 #!/bin.bash
 ip_country=$(curl -s "https://api.ipgeolocationapi.com/geolocate/123.123.123.123}" | jq --raw-output '.name')
 if [ -z "$ip_country" ]; then
      ip_country="Unknown"
 fi
 echo "${ip_country}"

但是,在lua中,我做了一些研究,似乎lunajson是处理json文件的最佳包(我个人认为)。我知道如何使用lunajson读取简单的json文件,但我没有找到如何使用它从网站读取json文件的示例,就像bash示例一样。是否需要导入特殊包才能从网站读取json文件(如上面的bash示例)?

点赞
用户7768165
用户7768165

如果你可以安装额外的 Lua 包(例如通过 Luarocks),那么你可以使用以下纯 Lua 的解决方案(在 Ubuntu 上测试过 Lua 5.1.5):

-- 从网站上读取远程文件
http = require("socket.http")
local body, code = socket.http.request("http://website/with/json/file.json")
if not body then error(code) end
local file = assert(io.open('file.json', 'w'))
file:write(body)
file:close()

-- 读取本地文件
local open = io.open
local file = open("file.json", "rb")
if not file then return nil end
local jsonString = file:read "*a"
file:close()

-- 使用 lunajson 解析 json
local json = require 'lunajson'
local t = lunajson.decode(jsonString)
print(t)

请注意,你需要安装 socket.httplunajson,方法如下:

luarocks install luasocket --local
luarocks install lunajson --local

最后,你可能需要通过使用 luarocks path --bin 来调整自己的 LUA_PATH,或者使用 eval $(luarocks path --bin) 来自动导出 LUA_PATH

2020-10-22 07:03:27