Node.js 解析 TOML 得到的 JSON 对象新增字段不生效且无报错
问题原因定位
核心本质
你在non-production.toml中定义的pack.c是包裹在引号内的JSON格式字符串,而非经过TOML解析的结构化JS对象。
TOML解析完成后,t.Jira.pack.c的实际数据类型是字符串,属于JS的原始值类型:
- 你控制台输出时看到的类对象结构,只是字符串本身的内容展示效果,不是真实的可操作对象
- 对原始值类型(字符串、数字、布尔等)执行自定义属性赋值的操作,在非严格模式下会被JS引擎静默忽略——既不会抛出错误,也不会真的修改原始值的内容
- 因此你先后执行的
a["customfield_11904"] = time、t.Jira.pack.c.customfield_11904 = time操作全部没有实际效果,三次控制台输出的内容完全一致。
修复方法
- 方案1:将TOML配置中的字符串JSON替换为TOML原生的嵌套对象结构,从根源上避免字符串解析问题:
[Jira.pack.c] project = { key = "DEMO" } issuetype = { id = 10002 } priority = { id = "3" } - 方案2:如果必须保留TOML中的JSON字符串写法,需要先手动解析、再修改、最后重新序列化回对象:
// 解析字符串为JS对象 a = JSON.parse(t.Jira.pack.c) // 给对象追加自定义字段 a.customfield_11904 = time // 将修改后的对象重新赋值给配置(因为原属性是字符串,需要重新序列化才能保留修改) t.Jira.pack.c = JSON.stringify(a)
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

