golang中是否有办法将任何json值解码为字符串。与json.Number类似,为什么还没有json.String?
例如,可以按照指示对以下内容进行解码
{"number": 123} => "123"
{"string": "123"} => "123"
{"float" : 123.45} => "123.45"
{"bool" : true} => "true"
{"empty" : ""} => ""
{"null" : null} => ""
答案 0 :(得分:5)
受此post的启发,我创建了一个JsonString类型。它会将任何字符串,数字,布尔值或空值解码为字符串。
https://play.golang.org/p/ucAxwriL2K
type JsonString string
type jsonString JsonString
func (st *JsonString) UnmarshalJSON(bArr []byte) (err error) {
j, n, f, b := jsonString(""), uint64(0), float64(0), bool(false)
if err = json.Unmarshal(bArr, &j); err == nil {
*st = JsonString(j)
return
}
if err = json.Unmarshal(bArr, &n); err == nil {
*st = JsonString(string(bArr[:]))
return
}
if err = json.Unmarshal(bArr, &f); err == nil {
*st = JsonString(string(bArr[:]))
return
}
if err = json.Unmarshal(bArr, &b); err == nil {
*st = JsonString(string(bArr[:]))
return
}
return
}