Knight docs
EN ID
GitHub

Plugin JSON

Parse, baca, bangun, dan simpan JSON dari gamemode.

Plugin JSON sudah termasuk dalam Knight. Karena berupa plugin Go, ia sudah dikompilasi ke binary server: tanpa langkah instalasi, cukup panggil native-nya dari .sa.

1. Penggunaan dasar

knight
let profile = "";

system::start() {
    profile = JsonParse("{"name":"CJ","money":4900,"admin":true,"bag":{"items":3}}");
};

player::command("/profile") {
    SendClientMessage(playerid, "nama={JsonGetString(profile, "name")}");
    SendClientMessage(playerid, "uang={JsonGetInt(profile, "money")}");
    SendClientMessage(playerid, "item={JsonGetInt(profile, "bag.items")}");
    if (JsonGetBool(profile, "admin")) {
        SendClientMessage(playerid, "Admin");
    }
};
Warning
{ dan } memulai interpolasi string di Knight. Escape menjadi \{ dan \} di dalam literal JSON, atau muat dokumen dari file.

2. Memuat dari file

knight
let data = JsonParseFile("data/config.json");
if (data == "") {
    Log("config.json hilang atau tidak valid");
    return;
}
let enabled = JsonGetBool(data, "features.shop");
JsonFree(data);

Path relatif terhadap root plugin (scriptfiles secara default, atau KNIGHT_JSON_ROOT). Path absolut dan traversal .. ditolak.

3. Menulis JSON

knight
player::command("/save") {
    let doc = JsonParse("{}");
    JsonSaveFile(doc, "players/" + PlayerName(playerid) + ".json", 2);
    JsonFree(doc);
};

Native reference

JSON 14

SignatureDescription
JsonParse(string text) -> stringParse a JSON string; returns a document id or "".
JsonParseFile(string path) -> stringParse a file inside the root; returns a document id or "".
JsonStringify(string id, int indent) -> stringSerialise a document (0 = compact).
JsonFree(string id) -> boolRelease a document.
JsonGetString(string id, string path) -> stringRead a value as a string.
JsonGetInt(string id, string path) -> intRead a value as an integer.
JsonGetFloat(string id, string path) -> floatRead a value as a float.
JsonGetBool(string id, string path) -> boolRead a value as a boolean.
JsonHas(string id, string path) -> boolWhether a path exists.
JsonType(string id, string path) -> stringobject/array/string/number/bool/null/missing.
JsonCount(string id, string path) -> intArray/object length, or string length.
JsonKeys(string id, string path) -> stringComma-separated keys, sorted.
JsonEscape(string text) -> stringQuoted, escaped JSON string.
JsonSaveFile(string id, string path, int indent) -> boolWrite a document inside the root.

5. Path

Argumen kedua menelusuri nilai bersarang dengan titik.

PathMemilih
"name"name level atas
"bag.items"field objek bersarang
"tags.1"elemen array kedua
""seluruh dokumen

6. Memori

Dokumen hasil parse tetap di memori sampai JsonFree(id) atau server berhenti. Selalu bebaskan dokumen yang tidak dipakai lagi, terutama bila mem-parse per pemain atau per request.

knight
player::command("/check", string text) {
    let doc = JsonParse(text);
    if (doc != "") {
        SendClientMessage(playerid, "keys={JsonKeys(doc)}");
        JsonFree(doc);
    }
};