• No labels

11 Comments

  1. type DeviceInfo struct {
       id       int    `orm:"id"`
       Device   string `orm:"device"`
       Info     string `orm:"device_info"`
       DeviceIp string `orm:"device_ip"`
       UploadAt string `orm:"upload_at"`
    }
    type ResponseRes struct {
       Code    int
       Message string
       Data    interface{} `json:"data"`
    }
    
    // Index is a demonstration route handler for output "Hello World!".
    func (a *helloApi) Index(r *ghttp.Request) {
       m := g.DB().Model("face_device_upload_info")
       var deviceInfo []*DeviceInfo
       m.Where("id>", "10").Scan(&deviceInfo)
       r.Response.WriteJsonExit(ResponseRes{Data: &deviceInfo})
    }

    这样的一个结构,device_infomysql内的JSON字段,但是转换的时候被转义了,如何设置不被转义呢?另外在r.Response.WriteJsonExit是否也会自动转义JSON?如何设置不转义?

    1. 首先你看看你的数据表中的数据device_info字段JSON字符串是否被转义。

      其次你的Info属性的类型是字符串,改为具体结构体试试。

  2. 首先mysql内的device_info肯定没有被转义,其次device_info这个字段为JSON类型,是不同设备发送的各类信息,内容各不相同,这个怎么处理?另外在r.Response.WriteJsonExit是否也会自动转义JSON?如何设置不转义?

  3. 如果不使用结构转换,GO好像可以用 jsonEncoder.SetEscapeHTML(false) 设置不转义?类似PHP中json_encode( $json_context, 320) 但是如果用框架的结构自动转换如何设置?这个需求在和很多第三方做对接时候用的很多

  4. 已经解决了,改为:
    Info map[string]string `orm:"device_info"`



    1. 你好,用你的实例我的怎么返回是nil呢,数据库字段是json类型,数据也是json格式

      1. 结构体支持mysql的json类型

        结构体对应json数据格式
        type  DeviceUIDNode  struct {
             Uid        string      `orm:"uid,primary" json:"uid"`         // UID 
            ServersId gjson.json  `orm:"servers_id" json:"servers_id"`  // 服务器id 
        }

        踩过的坑希望能帮助到大家

  5. chinayesgo chinayesgo 如果数据表字段为JSON格式,目前CLI工具是自动当做string类型来对应的,开发者可以自定义为map或者struct可以接受的类型,底层会自动转换。

    1. type DeviceInfo struct {
      	Id   int               `orm:"id"`
      	Info map[string]string `orm:"refund_exchange"`
      }
      type ResponseRes struct {
      	Code    int
      	Message string
      	Data    interface{} `json:"data"`
      }
      
      func (a *goodsApi) GetList(r *ghttp.Request) *response.Response {
      	m := g.DB().Model("goods")
      	var deviceInfo []*DeviceInfo
      	m.Where("id>", 10).Scan(&deviceInfo)
      	return &response.Response{Data: &deviceInfo, Message: response.SuccessGetList}
      }

      你好info的类型我试过map[string]string、map[string]interface{},refund_exchange在数据库是json类型 ,数据为[{"Uid": 1, "Name": "john", "Site": "https://goframe.org"}],或者{"Uid": 1, "Name": "john", "Site": "https://goframe.org"}返回都是nil,实现UnmarshalValue接口可以达到json转换的效果,但是所有的属性都要重写一遍 ,请问怎么操作好

      1. 你好,正常是可以自动接收JSON数据类型的,如果实在不行请将你的SQL和可运行的代码提交issue我帮你看看,WIKI中不接受issue反馈。

      2. 同样的问题, json 结构是 {} 能自动解开,是[{},{}]就解不开,同时返回nil