如果要在2种不同的JSON中解析对象,如何避免重复对象

I have an object that I receive:

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

The object I use is in a common lib, so it is shared by several services:

common.Measure:

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

and Meter:

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

But as the labels don't match, I must create another object MeasureFromJSON which is the created based in the json I receive.

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"`
}

Thing is I don't like to use 2 models for the same entity, just because I have no JSON labels in common object. Is there a way to use the common models (meter.Measure)?

展开翻译

译文

我有一个收到的对象:</ p>

  {\  n“ operation”:“ ACC00000001”,
“ prm”:“ 23597250350000”,
“ conso_prod”:“ Conso”,
“ index_name”:“ BASE”,
“ index_value”:“ 123456”,\ n“ timestamp”:“ 2019-08-20T22:00:00Z”
}
</ code> </ pre>

我使用的对象位于公共库中,因此它是共享的 通过以下几种服务:</ p>

通用。测量:</ p>

  type测量结构{
时间戳记时间。时间
Delta float64
重新分配 float64
IsProd bool
IndexValue uint32
IndexName字符串
源字符串
}
</ code> </ pre>

和仪表:</ p>

  type Meter struct {
ID字符串
操作字符串
单位字符串
时间步长时间。Duration
度量[] Measure
}
</ code> </ pre>

< p>但是由于标签不匹配,我必须创建另一个对象 MeasureFromJSON </ code>,它是基于json创建的 我收到。</ p>

 类型MeasureFromJSON结构{
操作字符串json:“ operation”绑定:“ required”
Prm字符串json:“ prm”
Conso_prod字符串json:“ conso_prod”
Index_name字符串json:“ index_name”
Index_value字符串json:“ index_value”
时间戳字符串json:“ timestamp”
}
</ code > </ pre>

我不喜欢对同一实体使用2个模型,只是因为我在公共对象中没有JSON标签。 有没有办法使用通用模型( meter.Measure </ code>)?</ p>
</ div>

doubairan4213
doubairan4213 如果您有两个不同的json对象,则需要两个不同的Go结构(或使用地图),Go在运行时不支持更改标签。避免重复的解决方案比重复本身要复杂得多。
8 个月之前 回复
dongyan7950
dongyan7950 差异标签。在一种情况下,我将具有prm标签:Prm字符串json:“prm”,在另一种情况下,我将收到PRM标签:Prm字符串json:“prmID”。事情是,我并不总是确定字段的名称,而我的提供者却可以。
8 个月之前 回复
du997562
du997562 我不理解不同解析的含义,您可以显示具体示例吗?
8 个月之前 回复
dongsigan2044
dongsigan2044 但是,那么我将无法对同一对象进行不同的解析,对吗?
8 个月之前 回复
doushan2311
doushan2311 同一实体如何返回两种不同的模型?
8 个月之前 回复
doutangu4671
doutangu4671 为什么不共同添加json标签到Measure?然后问题就解决了,还是我错过了什么?
8 个月之前 回复
duanou8504
duanou8504 您是否尝试过IndexName字符串json:“index_name”?或“标签不匹配”到底是什么意思?
8 个月之前 回复

1个回答

Thing is I don't like to use 2 models for the same entity, just because I have no JSON labels in common object

First of all, I have a question, how come same entity return two different sets of data that majority of the fields are different?

If those different fields are still from single entity, then you could probably combine the fields and store it into single 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"` 
}

展开翻译

译文




我不喜欢对同一实体使用2个模型,只是因为我没有JSON标签 </ p>
</ blockquote>

首先,我有一个问题,同一个实体为什么返回两个不同的数据集,而这些数据集的大多数字段是不同的?</ p> >

如果这些不同的字段仍来自单个实体,那么您可以合并这些字段并将其存储在单个 common.Measure </ code>中。</ p>

< pre class =“ lang-golang prettyprint-override”> type Measure struct {
Timestamp time.Timejson:“ timestamp”
Delta float64
重新分配的float64
IsProd bool
IndexValue字符串json :“ index_value”
IndexName字符串json:“ index_name”
源字符串
ConsoProd字符串json:“ conso_prod”
Prm字符串json:“ prm”
操作字符串
json:“ 操作”`
}
</ code> </ pre>
</ div>

dongqie2355
dongqie2355 那为什么不使用像现在已经做的两个结构
8 个月之前 回复
duandi5328
duandi5328 但是,如果我需要对同一个对象进行两次不同的解析,该怎么办? 我将更改字段,使其匹配。 但是如果有共同点,我会添加json解析功能,如果需要接收具有其他名称的标签,则将无法更改其他服务的标签。
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐