Docsの目次

JSONを読み書きする

JSONを読むときは、受け取りたいデータをclassで定義します。json_decode[User](text)でJSONからUserを作り、json_encode(user)でJSONの文字列に戻せます。

class User:
    name: str
    age: i32

def main() -> Result[unit, Error]:
    user = try json_decode[User](
        "{\"name\":\"Nagi\",\"age\":20}"
    )
    print(user.name)
    encoded = try json_encode(user)
    return ok(print(encoded))

json.nagiとして保存し、nagic run json.nagiで実行します。Nagiと、名前・年齢を含むJSONを表示します。読み書きに失敗する場合があるため、tryでエラーを呼び出し元へ返しています。詳しくはエラー処理を参照してください。

このページの目次

型と借用

classのほか、数値・bool・str・Listなど、JSONに対応する型を指定できます。関数、Error、Db、Htmlは読み書きの対象にできません。これらをListやResultの中に入れた場合も、checkでエラーになります。

json_decode[view[str]](text)はJSONの文字列を入力から借ります。結果を保存する場合は、入力も変数に保存し、借りている間は変更・移動しないでください。独立した文字列が必要ならjson_decode[str](text)を使います。

借用で読めるのは、入力をそのまま参照できる文字列です。JSON内の\nや\uXXXXなど、エスケープの展開が必要な文字列は借用では読めず、Resultのエラーになります。その場合もstrで読みます。

入力の検査

必須フィールドの欠落、余分なフィールド、型の違い、数値の範囲外、不正なUTF-8はエラーになります。たとえばage: i32に文字列や範囲外の整数は渡せません。

JSONは指定した型へ直接読み込みます。文字列のフィールドはデータを所有するため、読み込み時に保存領域を確保します。classのフィールドを入力から借りる機能や、省略された値を既定値で補う設定は未対応です。

HTTPでJSONを受け取ったり返したりする例は、HTTPとHTMLにあります。

Nagi 0.1のドキュメントこのページのソース