英文:
Go text/template templates: how to build a fallback when parent node in JSON input doesn't exist?
问题
假设你有一个通常会传入系统的 JSON 输入,例如:
{ "foods": { "plants": { "fruit": "apple" } } }
但是你希望能够处理一种情况,即 "plants" 节点不存在或其值为 null。例如:
{ "foods": { "plants": null } }
或者
{ "foods": { "fungi": { "mushrooms": "button" } } }
。
当我尝试使用各种 if 语句和其他方法(例如 {{ if .foods.plants.fruits }}stuff...{{ end }}
)时,我一直遇到错误,如 <.foods.plants.fruits>: map has no entry for key "plants"
或 <.foods.plants.fruits>: nil pointer evaluating interface {}.fruits
。
我想要一个模板,在父节点不存在时,我可以尝试检查备选选项,而不会导致 Go 进入恐慌状态或模板拒绝继续执行。比如说,如果 "plants" 父节点不存在,可以使用 foods.fungi.mushrooms
作为替代节点。
在 Go 的文本模板中是否有可能实现这一点?我查阅了文档并进行了一些搜索,但没有找到明显的解决方案。
谢谢!
英文:
Let's say you have a JSON input that normally comes into your system, like:
{ "foods": { "plants": { "fruit": "apple" } } }
But you want to be able to handle a case where the "plants" node doesn't exist or its value is null. Like:
{ "foods": { "plants": null } }
or
{ "foods": { "fungi": { "mushrooms": "button" } } }
.
When I've tried doing various if statements and things (like {{ if .foods.plants.fruits }}stuff...{{ end }}
, I keep running into errors like <.foods.plants.fruits>: map has no entry for key "plants"
or <.foods.plants.fruits>: nil pointer evaluating interface {}.fruits
I want a template where, if the parent node does not exist, I can try checking a fallback option, without the Go panicking or the template refusing to continue executing. Like, say, have it use foods.fungi.mushrooms
alternate node if the plants
parent node doesn't exist.
Is this possible in Go text/templates? I scoured through the docs and did some googling but am not seeing anything obvious.
Thanks!
答案1
得分: 1
一个同事给我提出了一个解决方案,最终起作用了:使用内置的 index
函数:
{{ if index .foods "plants" }}做一些事情{{ else }}当 '.foods.plants' 不存在时做其他事情{{ end }}
英文:
A coworker of mine suggested a solution that ended up working: use the built-in index
function:
{{ if index .foods "plants" }}do stuff{{ else }}do other stuff when '.foods.plants' is missing{{ end }}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论