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

Hugo技术求助:从含点对象的JSON文件获取数据失败

解决Hugo中获取/data下带点键的JSON数据问题

我碰到好几个Hugo用户都踩过这个带点JSON键的坑——Hugo的模板语法默认会把点当成嵌套对象的分隔符,所以直接用.访问带点的键肯定取不到值。咱们一步步来解决这个问题。

先明确问题根源

假设你的/data/hash.json内容是这样的:

{
  "user.fullname": "Daniel",
  "contact.email": "daniel@example.com",
  "preferences.theme": "dark"
}

如果你在模板里写{{ .Site.Data.hash.user.fullname }},Hugo会尝试去找hash对象下的user属性,再找user下的fullname属性,而不是直接找键为user.fullname的项——这就是为什么你之前的方法失效的核心原因。

两种有效解决方法

方法1:使用index函数(最推荐)

Hugo的index函数可以接收字符串形式的键,完美适配带点的场景。语法非常简单:

{{ index .Site.Data.hash "user.fullname" }}

这样就能直接取出"Daniel"这个值。如果是多层嵌套的带点键(比如JSON里是{"a.b": {"c.d": "hello"}}),可以链式调用index:

{{ index .Site.Data.hash "a.b" "c.d" }}

方法2:遍历所有键值对(适合批量处理)

如果你需要遍历整个JSON对象的所有键值(不管键有没有点),可以用range循环:

{{ range $key, $value := .Site.Data.hash }}
  <div class="data-item">
    <span class="key">{{ $key }}</span>
    <span class="value">{{ $value }}</span>
  </div>
{{ end }}

这个循环会把每个键(包括带点的user.fullname)和对应的值都渲染出来,完全不会有识别问题。

额外检查项

除了语法问题,还要确认这几点避免踩坑:

  • 确保JSON文件放在根目录下的/data文件夹里,文件名是hash.json(Hugo在Linux环境下区分大小写,注意文件名拼写)
  • 检查JSON格式是否合法:所有键和字符串值用双引号,逗号分隔正确,没有多余的逗号或语法错误
  • 本地开发时可以重启Hugo服务器,确保新的JSON文件被正确加载

这样处理后,你应该就能顺利获取到带点键的JSON数据了。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:28:39