【问题标题】:How to bind json stringify data in golang custom struct type? [closed]如何在golang自定义结构类型中绑定json字符串化数据? [关闭]
【发布时间】:2019-04-19 10:39:18
【问题描述】:

如何在golang自定义struct类型中绑定json字符串化数据?

js ajax

$.ajax({
    type: "POST"
    , url : url
    , data : JSON.stringify('{"nowBlockPositionX":3,"nowBlockPositionY":0,"nowBlock":{"O":0}}')
})

去自定义结构

type demo struct {
    nowBlockPositionX  int                `form:"nowBlockPositionX" json:"nowBlockPositionX"`
    NowBlockPositionY  int                `form:"nowBlockPositionY" json:"nowBlockPositionY"`
    NowBlock           map[string]int     `form:"nowBlock" json:"nowBlock" query:"nowBlock"`
}


不要绑定这个

demo := new(demo)
if err := c.Bind(demo); err != nil {
    c.Logger().Error(err)
}

【问题讨论】:

标签: json go echo bind stringify


【解决方案1】:

首先,修复demo 结构。结构中的字段需要导出。只需将每个字段的第一个字符更改为大写即可。

然后删除form:query: 标签。你只需要json: 标签。

type demo struct {
    NowBlockPositionX  int                `json:"NowBlockPositionX"`
    NowBlockPositionY  int                `json:"NowBlockPositionY"`
    NowBlock           map[string]int     `json:"NowBlock"`
}

在您的 javascript 代码中,$.ajax 语句上也出现了一些问题。

做这两件事:

  1. 将内容类型标头设置为application/json
  2. 删除JSON.stringify(),因为您的数据已经在字符串中。

工作代码:

$.ajax({
    url : url,
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    data: '{"nowBlockPositionX":3,"nowBlockPositionY":0,"nowBlock":{"O":0}}'
 })

【讨论】:

  • nit-pick:json 标签在那里,而您的标签不正确(以大写 N 开头)。在您的示例中,实际上不需要 JSON 标签,默认行为是将 JSON 直接映射到字段名称
猜你喜欢
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 2013-10-14
相关资源
最近更新 更多