Parsing a JSON document, reading a field, and writing it back out
// Parsing a JSON document, reading a field, and writing it back out.
import std.io.println;
import std.json.parse;
import std.json.stringify;
import std.json.value;
def main(): int {
let source: string = "{\"name\":\"SultanC\",\"stage\":2}";
match parse_json(&source) with
| result.err(_) -> { println("invalid json"); return 1; }
| result.ok(document) -> {
// Patterns use the canonical variant names; English variant aliases are
// accepted in expressions but not yet in patterns.
match json_root(&document) with
| قيمة_جسون.كائن(index) -> {
let key: string = "name";
match json_object_get(&document, index, &key) with
| option.some(قيمة_جسون.سلسلة(name)) -> { println(name); }
| _ -> { println("no name"); };
}
| _ -> { println("not an object"); };
match stringify_json(&document) with
| result.ok(encoded) -> { println(encoded); }
| result.err(_) -> { return 2; };
};
return 0;
}// تحليل وثيقة جسون وقراءة حقل منها ثم كتابتها من جديد.
استورد std.io.println;
استورد std.json.parse;
استورد std.json.stringify;
استورد std.json.value;
عرف الرئيسية(): عدد {
دع المصدر: نص = "{\"name\":\"SultanC\",\"stage\":2}";
طابق حلل_جسون(&المصدر) مع
| نتيجة.خطأ(_) -> { اطبع_سطر("جسون غير صالح"); أرجع 1; }
| نتيجة.نجح(الوثيقة) -> {
طابق جذر_وثيقة_جسون(&الوثيقة) مع
| قيمة_جسون.كائن(الموضع) -> {
دع المفتاح: نص = "name";
طابق قيمة_مفتاح_جسون(&الوثيقة, الموضع, &المفتاح) مع
| اختياري.موجود(قيمة_جسون.سلسلة(الاسم)) -> { اطبع_سطر(الاسم); }
| _ -> { اطبع_سطر("لا يوجد اسم"); };
}
| _ -> { اطبع_سطر("ليس كائنا"); };
طابق جسون_إلى_نص(&الوثيقة) مع
| نتيجة.نجح(المرمز) -> { اطبع_سطر(المرمز); }
| نتيجة.خطأ(_) -> { أرجع 2; };
};
أرجع 0;
}
Run it
With the interpreter, without compiling:
./build/sultanc run examples/en/formats/json.snOr compile it to an executable:
./build/sultanc examples/en/formats/json.sn -o build/example && ./build/example