由于无效字符,Json 解组失败

我很难在 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)


幕布斯7119047
浏览 369回答 2
2回答

www说

由于 JSON 不能包含任何控制字符,我找到了将 xml 数据简单地转换为 base64 的最方便的解决方案,例如:// before sending in javascripta.xml = new Buffer(a.xml).toString('base64')然后,在 golang 方面:// Declare a new type for custom unmarshalingtype XmlB64 []bytefunc (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}完成此操作后,无需在代码中做任何特殊操作即可完成对 base64 内容的解组。我们首先改变我们的结构:type A struct {  Xml XmlB64 `json:"xml"`}解组:var xml Aerr := json.Unmarshal(content, &xml)

明月笑刀无情

JSON 包将 []byte 值编码和解码为 base-64 编码字符串。如果 XML 不是 base-64 编码,则将类型更改为字符串以避免编码。type A struct {  Xml string `json:"xml"`}另一种解决方案是将 XML 编码为 base64 并保留问题中定义的类型。如果 base64 编码不是问题,则打印错误的偏移量并检查该偏移量处的 JSON 文本。err := json.Unmarshal(content, &xml)switch err := err.(type) {case *json.SyntaxError:   fmt.Printf("syntax error at offset %d: %v\n", err.Offset, err)case *json.UnmarshalTypeError:   fmt.Printf("type error at offset %d: %v\n", err.Offset, err)case nil:   // no errordefault:   fmt.Printf("error %v\n", err)}通常,XML 文本不能在没有引号的情况下用作 JSON 字符串。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go