Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Templates YAML中的感叹号(YAML标记),在使用jackson YamlApper进行反序列化和重新序列化时导致奇怪行为_Templates_Jackson_Yaml_Amazon Cloudformation - Fatal编程技术网

Templates YAML中的感叹号(YAML标记),在使用jackson YamlApper进行反序列化和重新序列化时导致奇怪行为

Templates YAML中的感叹号(YAML标记),在使用jackson YamlApper进行反序列化和重新序列化时导致奇怪行为,templates,jackson,yaml,amazon-cloudformation,Templates,Jackson,Yaml,Amazon Cloudformation,我尝试使用Jackson YamlApper对以下YAML内容进行反序列化和重新序列化。但是,标签!缺少ImportValue。请告诉我如何保留YAML标签!导入值 原始内容: AWSTemplateFormatVersion: 2010-09-09 Resources: S3Bucket: Type: AWS::S3::Bucket Properties: BucketEncryption: ServerSideEncryptionConfigu

我尝试使用Jackson YamlApper对以下YAML内容进行反序列化和重新序列化。但是,标签!缺少ImportValue。请告诉我如何保留YAML标签!导入值

原始内容:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketEncryption:
        ServerSideEncryptionConfiguration:
        - ServerSideEncryptionByDefault:
            KMSMasterKeyID: !ImportValue DefaultCustomerMasterKeyForThisRegionArn
            SSEAlgorithm: aws:kms
      BucketName: blahblah.com
AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketEncryption:
        ServerSideEncryptionConfiguration:
        - ServerSideEncryptionByDefault:
            KMSMasterKeyID: DefaultCustomerMasterKeyForThisRegionArn
            SSEAlgorithm: aws:kms
      BucketName: blahblah.com
反序列化和重新序列化后:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketEncryption:
        ServerSideEncryptionConfiguration:
        - ServerSideEncryptionByDefault:
            KMSMasterKeyID: !ImportValue DefaultCustomerMasterKeyForThisRegionArn
            SSEAlgorithm: aws:kms
      BucketName: blahblah.com
AWSTemplateFormatVersion: 2010-09-09
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketEncryption:
        ServerSideEncryptionConfiguration:
        - ServerSideEncryptionByDefault:
            KMSMasterKeyID: DefaultCustomerMasterKeyForThisRegionArn
            SSEAlgorithm: aws:kms
      BucketName: blahblah.com

通常,在YAML加载过程中,一旦将数据加载到本机类型中,标记就会被删除。请参见规范中的此图:

这意味着,如果要保留标记,应在映射到本机数据类型之前停止加载。大多数YAML实现都为此提供了API。Jackson使用SnakeYAML,它确实提供了这个API,但Jackson没有公开它。这意味着您需要直接使用SnakeYAML来实现这一点

你是这样做的:

StreamReader sr=/*您想要加载的任何内容*/;
分解器分解器=新分解器();
Composer-Composer=new-Composer(new-ParserImpl(sr),解析器);
Node root=composer.getSingleNode();
如果要再次写出YAML,请执行以下操作:

DumperOptions do=新的DumperOptions();
Serializer Serializer=新序列化程序(新发射器(输出,do),解析程序,do,null);
Writer w=/*你想写的地方*/;
serializer.serialize(根);

请注意,如果要更改任何内容,现在需要使用
节点
子类遍历数据。

引用要保留的值。很抱歉,我无法引用它,因为它不是普通字符串。这是YAML标记。Jackson不支持YAML标记。好的,谢谢你让我知道。