首页 > 文章列表 > 如何将整个 json 字符串传递到嵌套字段中进行解析?

如何将整个 json 字符串传递到嵌套字段中进行解析?

444 2024-02-08
问题内容

我需要解组平面 json 字符串

data := `{"login":"Nickname","password":"some_pass","newPassword":"new_pass"}`

进入UpdatePasswordRequest嵌套结构:

type SignInRequest struct {
    Login    string `json:"login"`
    Password string `json:"password"`
}

type UpdatePasswordRequest struct {
    NewPassword string        `json:"newPassword"`
    SignInData  SignInRequest `<tag>`
}

使用所有可能的 <tag> 值将 data 解组到 result

var result UpdatePasswordRequest
json.Unmarshal([]byte(data), &result)

给出空的 LoginPassword:

result.SignInData.Login = ""
result.SignInData.Password = ""

我应该如何定义 <tag> 以获得 LoginPassword 字段的正确值?


正确答案


如果您要使用 <tag> 的名称,您的 json 应该是嵌套的,而不是扁平的,如下所示:

data := `{"newPassword":"new_pass", "myTag":{"password":"some_pass", "login":"Nickname"}}`

如果你不能改变你的json,应该像这样组成结构(又名.struct embedding):

type SignInRequest struct {
    Login    string `json:"login"`
    Password string `json:"password"`
}

type UpdatePasswordRequest struct {
    NewPassword string        `json:"newPassword"`
    SignInRequest
}