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
| Signature | Description |
|---|---|
JsonParse(string text) -> string | Parse a JSON string; returns a document id or "". |
JsonParseFile(string path) -> string | Parse a file inside the root; returns a document id or "". |
JsonStringify(string id, int indent) -> string | Serialise a document (0 = compact). |
JsonFree(string id) -> bool | Release a document. |
JsonGetString(string id, string path) -> string | Read a value as a string. |
JsonGetInt(string id, string path) -> int | Read a value as an integer. |
JsonGetFloat(string id, string path) -> float | Read a value as a float. |
JsonGetBool(string id, string path) -> bool | Read a value as a boolean. |
JsonHas(string id, string path) -> bool | Whether a path exists. |
JsonType(string id, string path) -> string | object/array/string/number/bool/null/missing. |
JsonCount(string id, string path) -> int | Array/object length, or string length. |
JsonKeys(string id, string path) -> string | Comma-separated keys, sorted. |
JsonEscape(string text) -> string | Quoted, escaped JSON string. |
JsonSaveFile(string id, string path, int indent) -> bool | Write a document inside the root. |
5. Path
Argumen kedua menelusuri nilai bersarang dengan titik.
| Path | Memilih |
|---|---|
"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);
}
};