我需要解码其中包含“\ n”的JSON字符串:
[
{"Name":"Neo", "Message":"Hi\n:Hello everyone"},
{"Name":"Sam","Messsage":"Hello\nEveery\nOne"}
]
我使用下面的Golang代码:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Messages []string `json:"Name,omitempty"`
}
func main() {
s := "[{\"Name\":\"Neo\", \"Message\":\"Hi\n:Hello everyone\"}, {\"Name\":\"Sam\",\"Messsage\":\"Hello\nEveery\nOne\"}]"
var pro Person
err := json.Unmarshal([]byte(s), &pro)
if err == nil {
fmt.Printf("%+v\n", pro)
} else {
fmt.Println(err)
fmt.Printf("%+v\n", err)
}
}
但我收到错误:
ERROR invalid character '\n' in string literal
答案 0 :(得分:6)
这里有一些问题。第一个是JSON字符串中不允许换行。使用两个字节\n
指定换行符,而不是实际换行符。如果您使用解释的字符串文字,则必须使用\
引用\
。例如:
"Hello\\nWorld"
原始字符串文字中不需要引号:
`Hello\nWorld`
下一个问题是JSON值是一个对象值数组。要处理数组,请对切片进行解组:
var pro []Person
err := json.Unmarshal([]byte(s), &pro)
要处理对象,请将Person定义为结构:
type Person struct {
Name string
Message string
}
答案 1 :(得分:1)
使用反引号,就像这个工作示例代码:
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Name string `json:"Name"`
Message string `json:"Message"`
}
func main() {
s := `
[
{"Name":"Neo", "Message":"Hi\n:Hello everyone"},
{"Name":"Sam", "Message":"Hello\nEvery\nOne"}
]
`
var pro []Person
err := json.Unmarshal([]byte(s), &pro)
if err != nil {
fmt.Println(err)
}
fmt.Printf("%q\n", pro)
fmt.Println()
fmt.Println(pro)
}
输出:
[{"Neo" "Hi\n:Hello everyone"} {"Sam" "Hello\nEvery\nOne"}]
[{Neo Hi
:Hello everyone} {Sam Hello
Every
One}]