std.json

JSON の読み書き。任意モジュール。読み出しは短く書けることを優先していて、添字は常に Json を返す。無いキーや範囲外でも止まらず、最後に string() や int() で取り出したときに T? になる。

import std.json;
if var root = json.parse("{\"name\": \"さめ\"}") {
  print(root["name"].string() ?? "名無し");   // さめ
}
json.parse json.parse_file json.stringify json.stringify_pretty json.of json.none Json.string Json.int Json.float Json.bool Json.list Json.keys Json.exists Json.kind

関数

json.parse(s: string) → Result<Json>

文字列から読む。壊れていれば失敗を返す。

if var root = json.parse("{\"size\": 400}") {
  print(root["size"].int() ?? 0);   // 400
}
json.parse_file(p: string) → Result<Json>

ファイルから読む。

import std.file;
_ = file.write("fish.json", "{\"name\": \"さめ\"}");
if var root = json.parse_file("fish.json") {
  print(root["name"].string() ?? "");   // さめ
}
_ = file.remove("fish.json");
json.stringify(v: Json) → string

1行の文字列にする。

print(json.stringify(json.of(400)));   // 400
json.stringify_pretty(v: Json, indent: int) → string

字下げ付きの文字列にする。

vJson
indentint字下げの空白の数
var obj = json.of({"name": json.of("さめ")});
print(json.stringify_pretty(obj, 2).contains("\n"));   // true
json.of(v: int) → Json

Shark の値から Json を作る。

オーバーロード: json.of(v: float) -> Json json.of(v: string) -> Json json.of(v: bool) -> Json json.of(v: list<Json>) -> Json json.of(v: map<string, Json>) -> Json

print(json.stringify(json.of("さめ")));    // "さめ"
print(json.stringify(json.of(true)));      // true
print(json.stringify(json.of([json.of(1), json.of(2)])));   // [1,2]
json.none() → Json

「無い」を表す Json。

print(json.none().exists());   // false

Json

JSON の値。無いところを引いても止まらず、「無い」を表す Json が返る。

Json.string() → string?

文字列として取り出す。文字列でなければ none。

if var root = json.parse("{\"name\": \"さめ\"}") {
  print(root["name"].string() ?? "");     // さめ
  print(root["なし"].string() ?? "無し"); // 無し
}
Json.int() → int?

整数として取り出す。数でなければ none。

if var root = json.parse("{\"size\": 400}") {
  print(root["size"].int() ?? 0);   // 400
}
Json.float() → float?

小数として取り出す。

if var root = json.parse("{\"ratio\": 1.5}") {
  print(root["ratio"].float() ?? 0.0);   // 1.5
}
Json.bool() → bool?

真偽値として取り出す。

if var root = json.parse("{\"debug\": true}") {
  print(root["debug"].bool() ?? false);   // true
}
Json.list() → list<Json>

配列として取り出す。配列でなければ空の配列。

if var root = json.parse("{\"items\": [1, 2, 3]}") {
  print(root["items"].list().len());   // 3
}
Json.keys() → list<string>

表のキーを並べる。表でなければ空の配列。

if var root = json.parse("{\"a\": 1, \"b\": 2}") {
  print(root.keys().len());   // 2
}
Json.exists() → bool

値があるかどうか。無いキーを引いたあとの確認に使う。

if var root = json.parse("{\"a\": 1}") {
  print(root["a"].exists());     // true
  print(root["b"].exists());     // false
}
Json.kind() → string

種類を返す。"none" "bool" "number" "string" "list" "map" のどれか。

if var root = json.parse("{\"a\": [1]}") {
  print(root.kind());        // map
  print(root["a"].kind());   // list
}