英文:
Json error calling MarshalJSON for type json.RawMessage
问题
在尝试编组此结构体时,我遇到了以下错误:
json: 调用类型 json.RawMessage 的 MarshalJSON 时出错:JSON 输入结束时出现意外情况
针对下面的结构体对象:
type Chart struct {
ID int `json:"id,omitempty" db:"id"`
Name string `json:"name,omitempty" db:"name"`
Type string `json:"type,omitempty" db:"type"`
DashboardID int `json:"dashboard_id,omitempty"`
SourceType string `json:"source_type,omitempty" db:"source_type"`
Data json.RawMessage `json:"graph_data,omitempty"`
}
func main() {
chart := Chart{}
chart.ID = 1
chart.Name = "Jishnu"
str, err := json.Marshal(chart)
fmt.Println(err)
}
请注意,您在结构体标记中有一个拼写错误。在 Data
字段的 json
标记中,将 ommitempty
更正为 omitempty
。这将确保在编组结构体时,如果 Data
字段为空,则不会将其包含在 JSON 输出中。
修正后的代码如下:
type Chart struct {
ID int `json:"id,omitempty" db:"id"`
Name string `json:"name,omitempty" db:"name"`
Type string `json:"type,omitempty" db:"type"`
DashboardID int `json:"dashboard_id,omitempty"`
SourceType string `json:"source_type,omitempty" db:"source_type"`
Data json.RawMessage `json:"graph_data,omitempty"`
}
func main() {
chart := Chart{}
chart.ID = 1
chart.Name = "Jishnu"
str, err := json.Marshal(chart)
fmt.Println(err)
}
请注意,这只是修复了拼写错误,并不一定解决您的问题。如果问题仍然存在,请提供更多的上下文和错误信息,以便我能够更好地帮助您。
英文:
I am getting following error while trying to marshal this struct
> json: error calling MarshalJSON for type json.RawMessage: unexpected
> end of JSON input
for the object of below struct
type Chart struct {
ID int `json:"id,omitempty" db:"id"`
Name string `json:"name,omitempty" db:"name"`
Type string `json:"type,omitempty" db:"type"`
DashboardID int `json:"dashboard_id,omitempty"`
SourceType string `json:"source_type,omitempty" db:"source_type"`
Data json.RawMessage `json:"graph_data,ommitempty"`
}
func main() {
chart := Chart{}
chart.ID = 1
chart.Name = "Jishnu"
str, err := json.Marshal(chart)
fmt.Println(err)
}
答案1
得分: 10
通过将Chart.Data
更改为指针来修复
Data *json.RawMessage `json:"data,omitempty"`
Go 1.8(目前为rc3)将正确处理指针和非指针json.RawMessage的编组。
修复提交:https://github.com/golang/go/commit/1625da24106b610f89ff7a67a11581df95f8e234
英文:
Fixed by making Chart.Data
a pointer
Data *json.RawMessage `json:"data,ommitempty"`
Go 1.8 (currently rc3 as of writing) will correctly handle Marshalling of both a pointer and non-pointer json.RawMessage.
Fixing commit: https://github.com/golang/go/commit/1625da24106b610f89ff7a67a11581df95f8e234
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论