Я пытаюсь прочитать json, перебрать его и динамически изменить ключи. При поиске я получил ссылку https://play.golang.org/p/WAf8nZc8eR-
package main
import (
"encoding/json"
"fmt"
)
const (
inputExample = `{
"username": "admin",
"meta": {
"urls": {
"avatar": "https://example.com/avatar.png",
"profile_picture": "https://example.com/face.png"
},
"last_online": "yesterday"
}
}`
)
type output struct {
User string `json:"user"`
Picture string `json:"picture"`
}
func main() {
var in = struct {
Username string `json:"username"`
Meta struct {
URLs struct {
Picture string `json:"profile_picture"`
} `json:"urls"`
} `json:"meta"`
}{}
if err := json.Unmarshal([]byte(inputExample), &in); err != nil {
panic(err)
}
out := output{
User: in.Username,
Picture: in.Meta.URLs.Picture,
}
bs, err := json.Marshal(out)
if err != nil {
panic(err)
}
fmt.Println("output:", string(bs))
}
Вместо прямого изменения в структуре вывода, есть ли другой способ сделать? Поскольку json, который я использую, является динамическим, а количество ключей больше (может быть 100 ключей с вложенными значениями)
То, что я ищу, уже имеет определение сопоставления,
val["Username"] = "User"
val["profile_picture"] = "picture"
затем выполните итерацию по указанному json, если там присутствует ключ, замените ключ на основе карты val
и обновите новый json.