我很难在 golang 中解码 json 内容。
我的对象中的一个字段包含 xml 内容,有时它会失败,并声明如下消息:invalid character '\x..' in string literal
我知道这是由于我的 xml 中的控制字符造成的,但不知道如何处理它。 我将文档存储在 mongoosejs 中并将 xml 字段保存为 String 类型 我试图反序列化的结构是这样声明的:
type A struct {
Xml []byte `json:"xml"`
}
解码是通过以下方式完成的:
var xml A
err := json.Unmarshal(content, &xml)
最佳答案
由于JSON不能包含任何控制字符,我找到了最方便的解决方案,将xml数据简单地转换为base64,例如:
// before sending in javascript
a.xml = new Buffer(a.xml).toString('base64')
然后,在golang方面:
// Declare a new type for custom unmarshaling
type XmlB64 []byte
func (b *XmlB64) UnmarshalJSON(data []byte) error {
if b == nil {
return fmt.Errorf("UnmarshalJSON on nil pointer")
}
if len(data) == 0 {
return nil
}
if x, err := base64.StdEncoding.DecodeString(string(data)); err != nil {
return err
} else {
*b = x
}
return nil
}
之后,无需在代码中执行任何特殊操作即可完成 Unmarshalling base64 内容。我们首先改变我们的结构:
type A struct {
Xml XmlB64 `json:"xml"`
}
解码:
var xml A
err := json.Unmarshal(content, &xml)
关于由于字符无效,Json 解码失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294556/