Различные способы перебора json и замены ключей - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь прочитать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...