3 回答
TA贡献1783条经验 获得超4个赞
在这种情况下,我会考虑按以下顺序执行以下操作:
您可以读取正文,并检查第一个非空格字符以查看它是否是“[”或“{”,并据此进行解组。
您可以首先将其解组为数组,如果失败,则将其解组为单个对象。
您可以解组到接口{},执行类型断言,然后自行解析内容。
TA贡献1893条经验 获得超10个赞
检查第一个非空白字节以确定 JSON 文档是数组还是对象。相应地解码。
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条经验 获得超4个赞
为什么不直接添加 the [and]如果它不是他们的,然后始终将其视为数组?
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
或者,首先创建数组,然后根据第一个字符编组到数组或第一项:
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 关注
- 131 浏览
添加回答
举报