【发布时间】:2014-06-20 03:58:19
【问题描述】:
我在 go 中获取格式不统一的 JSON 文件。 例如,我可以有以下内容:
{"email": "\"blah.blah@blah.com\""}
{"email": "robert@gmail.com"}
{"name": "m\303\203ead"}
我们可以看到转义字符会有问题。
使用json.Decode:
与:
{"name": "m\303\203ead"}
我收到错误:invalid character '3' in string escape code
我尝试了几种方法来规范化我的数据,例如传递一个字符串数组(它可以工作,但有太多边缘情况),甚至过滤转义字符。
最后,我通过了这篇文章:(http://blog.golang.org/normalization) 他们提出的解决方案似乎很有趣。
我已经尝试了以下
isMn := func(r rune) bool {
return unicode.Is(unicode.Mn, r)
}
t := transform.Chain(norm.NFC, transform.RemoveFunc(isMn), norm.NFD)
fileReader, err := bucket.GetReader(filename)
transformReader := transform.NewReader(fileReader, t)
decoder := json.NewDecoder(tReader)
for {
var dataModel Model
if err := decoder.Decode(&kmData); err == io.EOF {
break
} else {
// DO SOMETHING
}
}
Model 是:
type Model struct {
Name string `json:"name" bson:"name"`
Email string `json:"email" bson:"email"`
}
我已经尝试了它的几种变体,但无法让它工作。
所以我的问题是如何轻松处理解码/解组具有不同编码的 JSON 数据?知道我无法控制这些 JSON 文件。
如果您正在阅读本文,无论如何,谢谢。
【问题讨论】: