为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go REST-API 中传输 MySQL JSON 数据类型

在 Go REST-API 中传输 MySQL JSON 数据类型

Go
慕神8447489 2022-03-07 15:48:26
我正在尝试设置一个从数据库查询数据并将其作为 JSON 发送的 Go MySQL 服务器。我的数据库包含一些新 JSON 类型的列。地图结构:type Map struct{ Id int `json:"id"` Data string `json:"data"` //This column is stored in the database as a JSON. Which type to use here? Created time.Time `json:"created"` UserId  int `json:userid`}从数据库中获取数据的函数func GetMap(id int) Map{ var mapId int var data string //which type should this be var userId int var created time.Time err := _getMap.QueryRow(id).Scan(&mapId, &data, &userId, &created) //getMap is a prepared query  mapObj := Map{Id:mapId, Data:data, UserId:userId, Created:created} return mapObj}当我像这样发送这些数据时resp.Header().Set("Content-Type", "application/json; charset=UTF-8")resp.WriteHeader(http.StatusOK)gmap := GetMap(id)err := json.NewEncoder(resp).Encode(gmap); 客户端收到的 JSON 中的数据被格式化为字符串:{\"field\":\"nowork\"...}我认为问题是由结构定义中的错误数据类型引起的,这意味着数据将以错误的格式解析。我试图将数据类型更改为 []uint8、interface{} 和其他一些我认为可能相关的数据类型,但无济于事。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

好的,就像评论中建议的 pregmatch 一样,我尝试使用JASON模块来处理 JSON 解析。令我惊讶的是,它有效:


func GetMap(id int) Map{

  var mapId int

  var data string

  var userId int

  var created time.Time

  err := _getMap.QueryRow(id).Scan(&mapId, &data, &userId, &created)


  if (err != nil){

    log.Print(err)

  }

  dataJSON, _ := jason.NewObjectFromBytes([]byte(data))

  mapObj := Map{Id:mapId, Data:dataJSON, UserId:userId, Created:created}

  return mapObj


}

在 REST-client 中以正确的格式接收:


{"field":"works!"...}


查看完整回答
反对 回复 2022-03-07
  • 1 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信