3 回答

TA貢獻1783條經(jīng)驗 獲得超4個贊
在這種情況下,我會考慮按以下順序執(zhí)行以下操作:
您可以讀取正文,并檢查第一個非空格字符以查看它是否是“[”或“{”,并據(jù)此進行解組。
您可以首先將其解組為數(shù)組,如果失敗,則將其解組為單個對象。
您可以解組到接口{},執(zhí)行類型斷言,然后自行解析內(nèi)容。

TA貢獻1893條經(jīng)驗 獲得超10個贊
檢查第一個非空白字節(jié)以確定 JSON 文檔是數(shù)組還是對象。相應(yīng)地解碼。
func decode(body []byte) ([]Foo, error) {
b = bytes.TrimLeft(body, " \t\n\r")
if len(b) > 0 && b[0] == '[' {
var v []Foo
err := json.Unmarshal(body, &v)
return v, err
}
var v [1]Foo
err := json.Unmarshal(body, &v[0])
return v[:], err
}

TA貢獻1869條經(jīng)驗 獲得超4個贊
為什么不直接添加 the [and]如果它不是他們的,然后始終將其視為數(shù)組?
body := []byte(`{"foo":"bar"}`)
body = bytes.TrimSpace(body)
if len(body) > 0 && body[0] != '[' {
tmp := make([]byte, len(body)+2, len(body)+2)
tmp[0] = '['
tmp[len(tmp)-1] = ']'
copy(tmp[1:len(tmp)-1], body)
body = tmp
}
https://play.golang.org/p/YfnLgN9q64F
或者,首先創(chuàng)建數(shù)組,然后根據(jù)第一個字符編組到數(shù)組或第一項:
f := make([]Foo, 1)
body := []byte(`{"foo":"bar"}`)
if len(body) > 0 && body[0] != '[' {
json.Unmarshal(body, &f[0])
} else {
json.Unmarshal(body, &f)
}
fmt.Println(f)
https://play.golang.org/p/1fxBKH3ZJyH
- 3 回答
- 0 關(guān)注
- 195 瀏覽
添加回答
舉報