英文:
Go json, marshal empty value
问题
我在使用omitempty
和空值方面遇到了问题。请参考这个示例。我有一个值,我不希望在编组时被忽略,即使值为""
。这明确意味着我想要清除该值,因此我希望得到编组结果:
{"cf_objectType":"Product","cf_isLocked":"No","cf_ErrorMessage":""}
我尝试了这里的指向字符串的方法,但出于某种原因,我不喜欢这种方法。是否有其他的替代方法?例如,为什么我们没有一个类似于omitempty
的标签,比如omitnull
之类的标签?
编辑
为了澄清,如下所示:
m := Metadata{
ObjectType: "Product",
Locked: "No",
ErrorMessage: "",
}
我希望对此结构体进行编组函数的结果是:
{
"cf_objectType":"Product",
"cf_isLocked":"No",
"cf_ErrorMessage":""
}
并且
m := Metadata{
ObjectType: "Product",
Locked: "No",
}
结果应该是:
{
"cf_objectType":"Product",
"cf_isLocked":"No",
}
英文:
I'm having problems with omitempty
and empty values. Please see this playground example. I have a value which I don't want to be ignored during marshal in case of value ""
. This explicitly means that I want to clear the value and therefore I want to have marshalled result:
{"cf_objectType":"Product","cf_isLocked":"No","cf_ErrorMessage":""}
Now I tried the pointer-to-string approach here, but for some reason I don't like this. Are there any alternatives known? For example, why don't we have a tag (just like omitempty
) like omitnull
or something?
EDIT
To clarify, see below
m := Metadata{
ObjectType: "Product",
Locked: "No",
ErrorMessage: "",
}
I want the result of the marshal function on this struct to be:
{
"cf_objectType":"Product",
"cf_isLocked":"No",
"cf_ErrorMessage":""
}
AND
m := Metadata{
ObjectType: "Product",
Locked: "No",
}
result shoulde be:
{
"cf_objectType":"Product",
"cf_isLocked":"No",
}
答案1
得分: 2
如果你不想省略空值,只需删除omitempty
标签。
https://play.golang.org/p/6axA2OIG6O
英文:
If you don't want to omit empty values, just remove omitempty
tag
答案2
得分: 1
关于你最后的评论(我没有足够的声望来回复):
> 好的,这个方法有效:play.golang.org/p/TYk67p6i_b 但是在我的结构定义中,我有一种混合了字符串和*字符串的情况。而且我也不能在没有var emptyString = ""
的情况下“填充”值,对吗?
请参考这个(Golang:将nil字符串指针设置为空字符串)的帖子
英文:
With regard to your last comment (for which I don't have enough reputation to reply to):
> Ok, this works: play.golang.org/p/TYk67p6i_b But then I have a mix of
> string and *string in my struct definition. And I also can't "fill"
> the value without having the var emptyString = ""
, right?
See this (Golang: set nil string pointer to empty string) post
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论