调用MarshalJSON函数时出现了Json错误,类型为json.RawMessage。

huangapple go评论94阅读模式
英文:

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

huangapple
  • 本文由 发表于 2017年2月14日 20:26:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/42226157.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定