SnakeYAML 转储嵌套密钥
SnakeYAML Dump nested key
我正在使用 SnakeYAML
作为项目的 YAML 解析器,但我不知道如何设置嵌套的键。例如,这是一个包含嵌套键的 YAML 文件。
control:
advertising:
enabled: true
logging:
chat: true
commands: true
format: '%id% %date% %username% | %value%'
我的目标是能够轻松地将路径 control.advertising.enabled
或 任何 其他路径设置为任何值。
当我使用
void Set(String key, Object value, String configName){
Yaml yaml = new Yaml();
OutputStream oS;
try {
oS = new FileOutputStream(main.getDataFolder() + File.separator + configName);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
Map<String, Object> data = new HashMap<String, Object>();
// set data based on original + modified
data.put(key, value);
String output = yaml.dump(data);
try {
oS.write(output.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
设置值,而不是获取
logging:
chat: true
commands: true
format: '%id% %date% %username% | %value%'
整个yaml文件被清除,我只得到
{logging.chat: false}
谢谢!
定义结构 Java 类:
public class Config {
public static class Advertising {
public boolean enabled;
}
public static class Control {
public Advertising advertising;
}
public static class Logging {
public boolean chat;
public boolean commands;
public String format;
}
Control control;
Logging logging;
}
那你可以这样修改:
Yaml yaml = new Yaml();
Config config = yaml.loadAs(inputStream, Config.class);
config.control.advertising.enabled = false;
String output = yaml.dump(config);
请注意,以这种方式加载和保存 YAML 数据可能会扰乱映射键的顺序,因为不会保留此顺序。我假设输出顺序将根据 Java 类 中的字段顺序,但我不确定。
我正在使用 SnakeYAML
作为项目的 YAML 解析器,但我不知道如何设置嵌套的键。例如,这是一个包含嵌套键的 YAML 文件。
control:
advertising:
enabled: true
logging:
chat: true
commands: true
format: '%id% %date% %username% | %value%'
我的目标是能够轻松地将路径 control.advertising.enabled
或 任何 其他路径设置为任何值。
当我使用
void Set(String key, Object value, String configName){
Yaml yaml = new Yaml();
OutputStream oS;
try {
oS = new FileOutputStream(main.getDataFolder() + File.separator + configName);
} catch (FileNotFoundException e) {
e.printStackTrace();
return;
}
Map<String, Object> data = new HashMap<String, Object>();
// set data based on original + modified
data.put(key, value);
String output = yaml.dump(data);
try {
oS.write(output.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
设置值,而不是获取
logging:
chat: true
commands: true
format: '%id% %date% %username% | %value%'
整个yaml文件被清除,我只得到
{logging.chat: false}
谢谢!
定义结构 Java 类:
public class Config {
public static class Advertising {
public boolean enabled;
}
public static class Control {
public Advertising advertising;
}
public static class Logging {
public boolean chat;
public boolean commands;
public String format;
}
Control control;
Logging logging;
}
那你可以这样修改:
Yaml yaml = new Yaml();
Config config = yaml.loadAs(inputStream, Config.class);
config.control.advertising.enabled = false;
String output = yaml.dump(config);
请注意,以这种方式加载和保存 YAML 数据可能会扰乱映射键的顺序,因为不会保留此顺序。我假设输出顺序将根据 Java 类 中的字段顺序,但我不确定。