Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Snake Yaml的必填字段缺少双引号_Java_Yaml_Snakeyaml - Fatal编程技术网

Java 使用Snake Yaml的必填字段缺少双引号

Java 使用Snake Yaml的必填字段缺少双引号,java,yaml,snakeyaml,Java,Yaml,Snakeyaml,我正在尝试读取Yaml模板,动态替换模板中的某些字段,并创建一个新的Yaml文件。我生成的yaml文件应该在所有方面反映模板,包括双引号。但是当我使用snake yaml时,我缺少必需字段的双引号。 有人能建议解决这个问题吗 例如: 我的yaml模板如下所示: 我正在阅读上面的模板并动态替换所需字段,如下所示 Yaml yaml = new Yaml(); InputStream inputStream = this.getClass().getClassLoader().getResou

我正在尝试读取Yaml模板,动态替换模板中的某些字段,并创建一个新的Yaml文件。我生成的yaml文件应该在所有方面反映模板,包括双引号。但是当我使用snake yaml时,我缺少必需字段的双引号。 有人能建议解决这个问题吗

例如:

我的yaml模板如下所示:
我正在阅读上面的模板并动态替换所需字段,如下所示

 Yaml yaml = new Yaml();
 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(yamlTemplateLocation);
 Map<String, Object>yamlMap = yaml.load(inputStream);

但我实际得到的输出如下
这里的问题是,在新的yaml文件中,我缺少“id”节点的双引号。 当我使用options.setDefaultScalarStyle(ScalarStyle.DOUBLE_引号)时,我得到的所有字段都是双引号,这不是必需的。我只需要id字段的双引号。 请任何人提出建议来解决这个问题


谢谢

如果您的输入是模板,那么最好使用模板引擎。举个简单的例子,
MessageFormat
允许您写入
id:“{0}”
,然后将实际值插入其中,保留双引号。根据您的用例,您可以使用更复杂的模板


话虽如此,让我们看看如何使用SnakeYAML:

如果要控制单个项作为标量呈现的方式,必须定义如下类:

class QuotedString{
公共字符串值;
公共QuotedString(字符串值){
这个值=值;
}
}
然后为其创建自定义重新输入:

类MyRepresenter扩展了Representer{
公共MyRepresenter(){
this.represents.put(QuotedString.class,新的RepresentQuotedString());
}
私有类RepresentQuotedString实现表示{
公共节点representData(对象数据){
QuotedString str=(QuotedString)数据;
返回代表标量(
Tag.STR、STR.value、DumperOptions.ScalarStyle.双引号);
}
}
}
修改代码以使用新类:

groups.put(“id”,新引号字符串(“5000Z”);
最后,指示SnakeYAML使用您的representer:

Yaml Yaml=new Yaml(new MyRepresenter(),options);

这应该就可以了。

Hi@flyx,我又收到了一个关于地图到yaml的空间转换的问题。示例:----------------------------版本:快照-01种类:示例元数据:名称:abc选项:“”
 Yaml yaml = new Yaml();
 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(yamlTemplateLocation);
 Map<String, Object>yamlMap = yaml.load(inputStream);
 yamlMap.put("version","v-1.0");
 Map<String, Object> metadata = (Map<String, Object>) yamlMap.get("metadata");
 metadata.put("name", "XYZ");

 Map<String, Object> groups = (Map<String, Object>) yamlMap.get("groups");
 groups.put("id","5000Z");
 groups.put("category","newCategory");

        DumperOptions options = new DumperOptions();
        options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
        options.setPrettyFlow(true);

        Yaml yaml = new Yaml(options);
        String output = yaml.dump(map);
        System.out.println(output);
version: v-1.0
kind: sample
metadata:
  name: XYZ
groups:
  id: "5000Z"
  category: newCategory
version: v-1.0
kind: sample
metadata:
  name: XYZ
groups:
  id: 5000Z
  category: newCategory