【问题标题】:How to parse json in lua?如何在lua中解析json?
【发布时间】:2017-06-27 14:52:39
【问题描述】:

是否有任何轻量级的、最好是纯 lua 的库供 lua 解析 json 内容?基本上我想用一个 lua 模块来扩充我的 ngnix,该模块需要从我从 Redis 获得的 json 对象中验证一些信息。

对象如下:

{
  "data": {
    "user": {
      "username": "username",
      "type": "TYPE"
    }
  },
  "passport": {
    "user": "uuid"
  },
}

在我的 lua 代码中,我需要验证 data.user.username 是否存在。然后我可以让 nginx 继续它的重定向。谁能给我举个例子来说明我如何做到这一点?

【问题讨论】:

  • 简单的答案就是选择你喜欢的库。其中有很多:)
  • 1, 2

标签: json nginx lua


【解决方案1】:

这种形式的 JSON 数据非常接近 Lua 表。因此,如果您信任 JSON 数据,您可以将 JSON 数据转换为 Lua 代码并运行它。

J=[[
{
  "data": {
    "user": {
      "username": "username",
      "type": "TYPE"
    }
  },
  "passport": {
    "user": "uuid"
  },
}
]]
L="return "..J:gsub('("[^"]-"):','[%1]=')
T=loadstring(L)()
print(T.data.user.username)

如果对 JSON 数据有任何疑虑,您可能希望在沙盒中运行 L 中的字符串。

【讨论】:

  • 为什么要使用 loadstring?
  • @warspyking 因为在“纯 lua”方式中,这几乎可以肯定是最快的。它可以做到in a safe way。 (除非 Lua 解析器中有一个非常丑陋的错误,但这不太可能。)此外,威胁级别之间存在差异,例如暴露于未知(很可能是一些恶意)数据的 Web API,以及用于快速加载由本地运行的其他受信任工具生成的数据的工具(即使 那个 工具与 'net )。
  • 我明白它的作用,但是对于这么简单的事情,加载字符串真的很贵,你不觉得吗?
  • @warspyking,我怀疑纯 Lua 中的手写 JOSN 解析器会比 Lua 解析器更快或使用更少的内存,但我没有测量任何东西。
  • 这仅适用于有限的 JSON 子集。即使在这个例子中,JSON 也是无效的,但它解析时没有任何错误。
猜你喜欢
  • 2021-05-15
  • 2021-05-16
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 2020-01-08
  • 2011-06-28
相关资源
最近更新 更多