在Golang中将任何JSON值解码为字符串

时间:2016-07-12 11:22:11

标签: json go

golang中是否有办法将任何json值解码为字符串。与json.Number类似,为什么还没有json.String?

例如,可以按照指示对以下内容进行解码

{"number": 123}      => "123"
{"string": "123"}    => "123"
{"float" : 123.45}   => "123.45"
{"bool"  : true}     => "true"
{"empty" : ""}       => ""
{"null"  : null}     => ""

1 个答案:

答案 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
}