我目前正在嘗試弄清楚如何從我的 config.yml 中獲取一個字串到我的 Java 代碼中。更具體地說,使用哪個路徑將"Home"、"X:-1 Y:79 Z:3"、"Nether"或"X:23 Y:65 Z:-19"提取到我的 Java 代碼中。我已經試過了getConfig().getString("Streuzel[0].name"),但是沒有用。
YAML:(具有多個物件的陣列)
Streuzel:
-
name: Home
coords: X:-1 Y:79 Z:3
-
name: Nether
coords: X:23 Y:65 Z:-19
爪哇:
Bukkit.broadcastMessage(ChatColor.YELLOW getConfig().getString("path?") ChatColor.WHITE ", " ChatColor.GREEN getConfig().getString("path?"));
uj5u.com熱心網友回復:
實際上,Streuzel是一個List,而不是一個陣列,所以你需要使用getList(String)而不是getString(String)。在您的情況下,此串列的每個元素都是Map<String, String>. 所以,如果你不關心型別轉換的安全性(因為 yaml 可以由人類編輯并且它可能會丟失結構),你可以使用這樣的東西:
((Map<String, String>)config.getList("Streuzel").get(0)).get("name") // Home
但理想情況下,您可以檢查“Streuzel”是否是一個串列以及它是否包含一個 Map,或者嘗試...catch ClassCastException。
關于 3 分鐘前發布的答案:Streuzel是 a List,不是 a Map!
編輯:他們修好了
uj5u.com熱心網友回復:
如果你真的想作為串列獲取,你可以使用getConfig().getList("Streuzel")它將回傳一個LinkedHashMap<>. 你可以這樣使用它:
LinkedHashMap<String, Object> myObj = (LinkedHashMap<String, Object>) getConfig().getList("Streuzel").get(0);
Bukkit.broadcastMessage(ChatColor.YELLOW myObj.get("name") ChatColor.WHITE ", " ChatColor.GREEN myObj.get("coords"));
但是,不建議這樣做。最好使用這樣的配置部分:
Streuzel:
1:
name: Home
coords: X:-1 Y:79 Z:3
2:
name: Nether
coords: X:23 Y:65 Z:-19
然后,您可以像這樣使用它們:
Bukkit.broadcastMessage(ChatColor.YELLOW getConfig().getString("Streuzel.1.name") ChatColor.WHITE ", " ChatColor.GREEN getConfig().getString("Streuzel.1.coords"));
這樣,有了部分,就可以更輕松地獲取所有內容。如果要查找所有部分,請這樣做:
// here is the config with all keys
ConfigurationSection globalSection = getConfig().getConfigurationSection("Streuzel");
for(String keys : globalSection.getKeys(false)) { // all kays: "1", "2" ...
ConfigurationSection objSection = globalSection.getConfigurationSection(keys);
// here you can load your object, log it or get content with objSection.getString()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/433004.html
