我从io.Reader
得到http.Request.Body
,它从服务器读取JSON字节切片。
我想将此流式传输到json.NewDecoder
。但是我还希望在它到达json.NewDecoder
之前截取JSON并替换它的某些部分。例如,JSON字符串包含空哈希" {}"我想删除由于服务器的JSON输出中的错误。
我目前正在使用json.Unmarshal
但未使用JSON流解析器实现我的目标:
data, _ := ioutil.ReadAll(r.Body)
data = bytes.Replace(data, []byte("{}"), "", -1)
json.Unmarshal(data, [my struct])
如何使用json.NewDecoder
实现与上述相同的功能,以便我可以保存上述代码必须多次解析r.Body
的数据?这是使用伪函数ReplaceStream(r io.Reader, old, new []byte)
:
reader := ReplaceStream(r.Body, []byte("{}"), "")
dec := json.NewDecoder(reader)
dec.Decode([my struct])
我知道ReplaceStream
可能相当微不足道,但标准库中是否有任何我不知道的内容?
答案 0 :(得分:0)
我的建议是将这种消息视为一种特殊情况,并避免额外解析/替换所有其他请求
data, _ := ioutil.ReadAll(r.Body)
// FIXME: overcome bug #12312 of json server
if data == `{"list": [{}]}` {
return []
}
// Normal datastruct ..