将"\n"嵌入到字符串文字中时出错

Har*_*rdy 2 go

我需要解码其中包含"\n"的JSON字符串:

[
    {"Name":"Neo", "Message":"Hi\n:Hello everyone"},
    {"Name":"Sam","Messsage":"Hello\nEveery\nOne"}
]
Run Code Online (Sandbox Code Playgroud)

我使用下面的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)
}
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

ERROR invalid character '\n' in string literal
Run Code Online (Sandbox Code Playgroud)

Cer*_*món 6

这里有一些问题.第一个是JSON字符串中不允许换行.使用这两个字节\n指定换行符,而不是实际的换行符.如果使用解释的字符串文字,则\必须使用a引用\.例:

"Hello\\nWorld"
Run Code Online (Sandbox Code Playgroud)

原始字符串文字中不需要引用:

`Hello\nWorld`
Run Code Online (Sandbox Code Playgroud)

下一个问题是JSON值是一个对象值数组.要处理数组,请对切片进行解组:

var pro []Person
err := json.Unmarshal([]byte(s), &pro)
Run Code Online (Sandbox Code Playgroud)

要处理对象,请将Person定义为结构:

type Person struct {
  Name    string
  Message string
}
Run Code Online (Sandbox Code Playgroud)

在操场上的工作示例.