Json 模块

lua-users home
wiki

JSON(JavaScript? 对象表示法)是一种基于 JavaScript? 数据结构格式的序列化数据格式。有关 JSON 的更多信息,请参阅 http://www.json.org/[维基百科上的 JSON 文章]

JSON 模块比较

由于某些模块仅称为“json”,因此添加了首字母以创建唯一名称

此比较最初由 DavidKolf(dkjson 的作者)发起,因此可能存在偏差。

为了比较,使用了默认选项。我(DavidKolf)期望模块在默认设置下与 JSON 兼容。Fleece 进行了例外处理,大多数比较对于除“E4”选项之外的任何其他选项都没有意义。

dkjson 的存储库中可以找到 [功能/合规性测试][速度测试]

其他 JSON 实现

尚未包含在此比较中的 JSON 实现

主要错误

编码时的转义字符

根据 [RFC 4627],范围为 0 到 31 的所有字符以及 \\ 和 \" 都必须转义。但是,建议还转义 Unicode 字符 U+2028 和 U+2029 以 [生成有效的 JavaScript][原始 JSON 实现] 甚至更进一步,转义了大多数控制字符和 BMP 中未定义的代码点。

解码时支持 unicode 转义序列 \uXXXX

其他错误

编码的边缘情况

JSON 无法表示所有 Lua 结构。本节列出了某些情况下的行为。你不应该将任何此类数据馈送到任何 JSON 模块,但这些模块如何处理这些数据仍然很有趣。模块不得挂起或崩溃,也不得产生无效的 JSON 输出。(引发 Lua 错误是处理此类数据的有效方法)。

混合表

{[1] = 1, a = 2}

稀疏数组

{[1000] = "test"}

NaN 和 Inf 的处理

nan = math.huge * 0
inf = math.huge

编码时防止引用循环

a = {}
a.a = a

空数组的处理

local json_str = '{"items":[],"properties":{}}'
assert(json_str == json.encode(json.decode(json_str)))

编码速度

解码速度

为了进行速度测试,一个表被编码或解码了 100000 次。这些值并不精确,在使用其他数据时可能会有所不同,但它们应该提供一个大致的参考。FIXME - 在不知道表的内容的情况下,很难在这里运行新的测试?

另请参阅


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2018 年 8 月 5 日上午 6:27 GMT (差异)