doucuo9126 2016-07-27 19:24
浏览 134
已采纳

取消编组时跳过解码Unicode字符串:golang

I have this JSON:

{
    "code":"\u5728\u4e30\u5fb7\u5c14Berro\u8212\u9002\u76841\u623f\u5355\u4f4d"
}

And this struct

type Text struct {
    Code string
}

If I use any of the json.Unmarshal or NewDecoder.Decode, the Unicode is converted to the actual Chinese. So Text.Code is

在丰德尔Berro舒适的1房单位

I don't want it to convert, I want the same unicode string.

  • 写回答

3条回答 默认 最新

  • dozrhldy285751 2016-07-27 19:43
    关注

    You can do this with custom decoder https://play.golang.org/p/H-gagzJGPI

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type RawUnicodeString string
    
    func (this *RawUnicodeString) UnmarshalJSON(b []byte) error {
        *this = RawUnicodeString(b)
        return nil
    }
    
    func (this RawUnicodeString) MarshalJSON() ([]byte, error) {
        return []byte(this), nil
    }
    
    type Message struct {
        Code RawUnicodeString
    }
    
    func main() {
        var r Message
        data := `{"code":"\u5728\u4e30\u5fb7\u5c14Berro\u8212\u9002\u76841\u623f\u5355\u4f4d"}`
        json.Unmarshal([]byte(data), &r)
        fmt.Println(r.Code)
        out, _ := json.Marshal(r)
        fmt.Println(string(out))
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?