Модификация данных для маршалинга в JSON - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть код, из которого я извлекаю данные из Монго и хотел бы выдать их в виде ответа API.Моя главная проблема - не иметь возможности преобразовать данные перед их выталкиванием.

var result interface{}

respBody, err := json.Marshal(result)

Можно ли отредактировать маршалированный результат до того, как он выйдет?например.Вынуть несколько полей?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Если вы просто хотите удалить некоторые поля из ответа json, то вы можете сделать это следующим образом:

package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    Name string `json:"name"`
    Password string `json:"-"` . //remove from json
}

func main() {
    fmt.Println("Hello, playground")
    u := &User{Name:"alpha", Password: "beta"}
    b, _ := json.Marshal(u)
    fmt.Println(string(b))

}

В некоторых случаях вы можете также создать пользовательский json Marshaller, введя MarshalJSON вСтруктура пользователя.
Например, чтобы изменить имена полей:

func (u *User) MarshalJSON() ([]byte, error) {
    return json.Marshal(&struct {
        Name string `json:"name"`
        Key string `json:"key"`
    }{
        Name: u.Name,
        Key: u.Password,
    })
}
0 голосов
/ 21 февраля 2019

Обычный способ выполнить то, что вы пытались описать, будет выглядеть примерно так:

type Data struct {
    Name    string
    Age     int
    Address *Address
    // more fields of your data object
}

type Response struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func GetResponse(d Data) ([]byte, error) {
    r := Response{
        Name: d.Name,
        Age:  d.Age,
        // anything else
    }

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