如何使用Go标准库替换流中的字节?

时间:2014-03-16 17:19:52

标签: json go

我从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可能相当微不足道,但标准库中是否有任何我不知道的内容?

1 个答案:

答案 0 :(得分:0)

我的建议是将这种消息视为一种特殊情况,并避免额外解析/替换所有其他请求

data, _ := ioutil.ReadAll(r.Body)
// FIXME: overcome bug #12312 of json server 
if data == `{"list": [{}]}` {
  return []
} 
// Normal datastruct ..