能否定义 struct ,json 化输出 string
希望内层数据能在使用时用 struct ,序列化时,转成 string
比如
type User struct {
Name string `json:"name"`
}
type UsersContainer struct {
Users []User `json:"users"`
}
users := []User{{Name: "aaa"}}
container := UsersContainer{Users: users}
正常转成 json 后是 {"users":[{"name":"aaa"}]}"
有些 http api 会把一个变量参数定义成 string 格式
期望结果是 {"users":"[{\"name\":\"aaa\"}]"}"
1
danbai 28 天前 via Android
你可以给里面的结构体实现自定义序列号方法
|
2
danbai 28 天前 via Android
给某个类型实现。UnmarshalJSON([]byte) error 和 MarshalJSON() ([]byte, error)
|
3
danbai 28 天前 via Android
[]User 可以单独定为一个类型
|
4
NX2023 28 天前
你可以使用 HTML 转义,比如 " 变成 " ,然后到另一段再转换回来
|
5
fzdwx 28 天前 via Android
在转一遍
|
6
body007 27 天前 1
```go
package main import ( "encoding/json" "fmt" ) func main() { users := []User{{Name: "aaa"}} b, err := marshal(users, true) if err != nil { panic(err) } fmt.Printf("%s\n", b) b, err = marshal(users, false) if err != nil { panic(err) } fmt.Printf("%s\n", b) } type User struct { Name string `json:"name"` } type UsersContainer struct { Users any `json:"users"` } func marshal(user []User, str bool) ([]byte, error) { var container UsersContainer if str { b, err := json.Marshal(user) if err != nil { return nil, err } container.Users = string(b) } else { container.Users = user } return json.Marshal(container) } ``` |