JSON API
JSON の解析とシリアライズのヘルパーは ptool.json と p.json に
あります。
ptool.json.parse
v0.3.0- Introduced.
ptool.json.parse(input) は JSON 文字列を Lua 値へ解析します。
input(string, 必須): JSON テキスト。- 戻り値: 解析された Lua 値。ルートはどの JSON 型でもかまいません。
型対応:
- JSON object -> Lua table
- JSON array -> Lua sequence table (1-based)
- JSON string -> Lua string
i64に収まる JSON integer -> Lua integer- それ以外の JSON number -> Lua number
- JSON boolean -> Lua boolean
- JSON null -> Lua
nil
エラー時の挙動:
inputが文字列でない場合はエラーになります。- JSON 構文エラーでは、
serde_jsonのパーサー詳細を含むメッセージで エラーになります。
例:
local data = p.json.parse('{"name":"ptool","features":["json","repl"],"stars":42}')
print(data.name)
print(data.features[1])
print(data.stars)
ptool.json.stringify
v0.3.0- Introduced.
ptool.json.stringify(value[, options]) は Lua 値を JSON 文字列へ変換します。
value(JSON 互換 Lua 値, 必須): エンコードする値。options(table, 任意): シリアライズオプション。options.pretty(boolean, 任意):trueのとき見やすく整形された JSON を出力します。デフォルトはfalse。- 戻り値: エンコードされた JSON 文字列。
挙動:
- デフォルト出力は余分な空白のないコンパクト JSON です。
- pretty 出力ではインデント付きの複数行 JSON を使います。
- 値は JSON 互換である必要があります。
function,thread,userdataなどのシリアライズできない Lua 値はエラーになります。
例:
local text = p.json.stringify({
name = "ptool",
features = {"json", "repl"},
stable = true,
}, { pretty = true })
print(text)
注意:
- Lua テーブル内の
nil値はmluaの serde 変換挙動に従うため、 JSON オブジェクトのフィールドとして保持されません。 - Lua テーブルが配列かオブジェクトかの判定は
mluaの serde 変換ルールに 従います。