JSON错误调用MarshalJSON以获取json.RawMessage类型

尝试封送此结构时出现以下错误</ p>


json:为类型json调用MarshalJSON时出错。RawMessage:JSON输入意外
结束</ p>
</ blockquote>

对于以下结构</ p>
的对象

 类型图表结构{
ID intjson:“ id,omitempty” db:“ id”
名称字符串json:“ name,omitempty” db:“ name”
类型字符串json:“ type,omitempty” db:“ type”
DashboardID intjson:“ dashboard_id,omitempty”
SourceType字符串json:“ source_type,omitempty” db:“ source_type”
数据 json.RawMessagejson:“ graph_data,ommitempty”
}

func main(){
chart:= Chart {}
chart.ID = 1
chart.Name =“ Jishnu”
str ,err:= json.Marshal(图表)
fmt.Println(err)
}
</ code> </ pre>
</ div>

展开原文

原文

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)
}

dsdioa9545
dsdioa9545 添加了用于重现错误的代码
3 年多之前 回复
duanlan7903
duanlan7903 json有效吗?
3 年多之前 回复

1个回答



通过将 Chart.Data </ code>用作指针</ p>

 数据* json.RawMessagejson:“ data,ommitempty”
</ code> </ pre>

转到1.8(目前截至编写时为rc3)将正确处理指针和 非指针json.RawMessage。</ p>

修复提交: https ://github.com/golang/go/commit/1625da24106b610f89ff7a67a11581df95f8e234 </ p>
</ div>

展开原文

原文

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问