You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用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é

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:12:05