为何使用gopkg.in/yaml.v3序列化字符串时格式存在差异?
YAML序列化后引号类型变化的原因
输入YAML文件
title: "2023-08-23" title2: "A title with a colon: inside" title3: '2023-08-23'
处理代码
rawYaml, _ := os.ReadFile("./input.yaml") yamlMap := make(map[string]string) yaml.Unmarshal(rawYaml, &yamlMap) marschalled, _ := yaml.Marshal(yamlMap) fmt.Println(string(marschalled))
输出结果
title: "2023-08-23" title2: 'A title with a colon: inside' title3: "2023-08-23"
原因解析
- title仍用双引号包裹:
2023-08-23符合YAML的日期格式,yaml.v3为了防止它被解析成日期类型,强制用双引号包裹,确保该值始终被识别为字符串。 - title2用单引号包裹:字符串包含冒号且冒号后有空格,这种结构在YAML中会被误判为键值对的分隔。单引号在YAML中属于纯字面量包裹符,不会解析内部的特殊字符,能避免语法歧义,因此被自动选用。
- title3引号类型转换:反序列化时,原始的单引号信息会丢失,程序仅保留字符串
2023-08-23的实际值。序列化时,由于该值符合日期格式逻辑,会和title一样被双引号包裹,因此出现引号类型转换。
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

