Json 模組

lua-users home
wiki

JSON(JavaScript 物件表示法)是基於 JavaScript 資料結構格式的一種序列化資料格式。有關 JSON 的更多資訊,請參閱 http://www.json.org/[JSON 的維基百科文章]

JSON 模組比較

由於有些模組僅稱為「json」,故新增開頭字母以建立唯一名稱

此比較一開始由 dkjson 作者 DavidKolf 開始,因此可能有所偏頗。

比較時使用預設選項。我(DavidKolf)預期模組會使用預設設定與 JSON 相容。針對 Fleece 開了個例外,此比較中大多數內容對選項「E4」以外的選項來說並不適用。

可以在 dkjson 儲存庫中找到 [功能/相容性測試][速度測試]

其他 JSON 實作

未包含在此比較(尚未)的 JSON 實作

主要錯誤

編碼時的轉義字元

根據 [RFC 4627],0 到 31 範圍內的所有字元加上 \\ 和 \" 都必須轉義。不過也建議轉義 U+2028 和 U+2029 Unicode 字元,以便 [產生有效的 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 (差異)