如何在YAML配置文件中设置/获取哈希映射?

如何在YAML配置文件中设置/获取哈希映射?,yaml,minecraft,bukkit,Yaml,Minecraft,Bukkit,我正在制作我的第一个bukkit插件。我想以编程方式创建一个YAML文件,该文件表示HashMap。如何设置和获取此数据结构 HashMap参数看起来像,其中Signature是存储4个整数的我的类,Location是org.bukkit.Location 我想我希望YAML文件看起来像这样,但我不确定这种结构是否最好: MyPlugin: ListOfData: - signature: [1,2,3,4] # this is a unique set of 4

我正在制作我的第一个bukkit插件。我想以编程方式创建一个YAML文件,该文件表示
HashMap
。如何设置和获取此数据结构

HashMap
参数看起来像
,其中
Signature
是存储4个整数的我的类,
Location
org.bukkit.Location

我想我希望YAML文件看起来像这样,但我不确定这种结构是否最好:

MyPlugin:
    ListOfData:
        - signature: [1,2,3,4]    # this is a unique set of 4 integers
          location: [122,64,254]  # non-unique set of 3 integers
        - signature: [4,2,1,2]
          location: [91,62,101]
        - signature: [3,3,1,3]
          location: [190,64,321]
签名
可以根据需要进行修改,如果需要,我可以为
位置
创建包装


谢谢

这是一个建议的解决方案。我不知道这是不是最好的方法……:) 你可能想把这个当作你的YAML结构:

MyPlugin:
    ListOfData:
        '[1,2,3,4]': '[122,64,254]'
        '[4,2,1,2]': '[91,62,101]'
        '[3,3,1,3]': '[190,64,321]'
        anothersignature:anotherlocation
        ...
这将使您能够使用从YAMLConfiguration(见下文)读取哈希映射的常规技术来读取中的“ListOfData”

您必须将文件中的传入信息视为的哈希映射,并从中进行所需的任何转换(例如,将122,64254转换为位置)

要读取哈希映射,请执行以下操作:

this.getConfig().getConfigurationSection("path.to.map").getValues(false)
要写入HashMap(仍需调用saveConfig()以写入磁盘),请执行以下操作:

这里有一些细节和微妙之处,值得仔细阅读(同一页,但不同的非连续部分):


我的初始答案在示例YAML中有语法错误,我省略了字符串周围的引号,并且在每个HashMap对中的冒号(:)后面需要一个空格。我已经修正了文本。一些潜在的陷阱:1)因为你正在存储位置,考虑是否需要在坐标之外存储一个世界名称(以兼容多世界)。2) 如果找不到指定的sectionpath,getConfigurationSection将返回null,因此如果您不能100%确定sectionpath是否存在,则应单独执行该步骤并检查null。我决定只创建一个包装器并序列化数据(因为它不是绝对必要的文本可编辑),但我会考虑你对未来的回答。非常感谢。
this.getConfig().createSection("path.to.map", MyMap)