Как избежать дублирования объекта, если я хочу проанализировать его в 2 разных JSON - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть объект, который я получаю:

{
    "operation": "ACC00000001", 
    "prm": "23597250350000", 
    "conso_prod": "Conso",
    "index_name": "BASE",
    "index_value": "123456",
    "timestamp": "2019-08-20T22:00:00Z"
 }

Используемый мной объект находится в общей библиотеке, поэтому он используется несколькими службами:

common.Measure:

type Measure struct {
    Timestamp     time.Time
    Delta         float64
    Redistributed float64
    IsProd        bool
    IndexValue    uint32
    IndexName     string 
    Source        string 
}

и Meter:

type Meter struct {
    ID          string
    Operation string
    Unit        string
    Timestep    time.Duration
    Measures    []Measure
}

Но поскольку метки не совпадают, я должен создать еще один объект MeasureFromJSON, созданный на основе json, который я получаю.

type MeasureFromJSON struct {
    Operation   string `json:"operation" binding:"required"`
    Prm         string `json:"prm"`
    Conso_prod  string `json:"conso_prod"`
    Index_name  string `json:"index_name"`
    Index_value string `json:"index_value"`
    Timestamp   string `json:"timestamp"`
}

Дело в том, что мне не нравится использовать 2 модели для одной и той же сущности, просто потому, что у меня нет меток JSON в общем объекте.Есть ли способ использовать общие модели (meter.Measure)?

1 Ответ

0 голосов
/ 23 сентября 2019

Дело в том, что мне не нравится использовать 2 модели для одной и той же сущности, просто потому, что у меня нет меток JSON в общем объекте

Прежде всего, у меня есть вопрос,почему одна и та же сущность возвращает два разных набора данных, в которых большинство полей различаются?

Если эти разные поля все еще принадлежат одной сущности, то вы, вероятно, можете объединить поля и сохранить их в одном common.Measure.

type Measure struct {
    Timestamp     time.Time `json:"timestamp"`
    Delta         float64
    Redistributed float64
    IsProd        bool
    IndexValue    string `json:"index_value"`
    IndexName     string `json:"index_name"` 
    Source        string 
    ConsoProd     string  `json:"conso_prod"` 
    Prm           string  `json:"prm"` 
    Operation     string  `json:"operation"` 
}
...