我正在使用go编写后端以在数据存储区中执行CRUD操作。其中一种“规则”具有以下字段: 名称/ ID(由DS本身生成)数字ID, 名称字符串,活动布尔值,条件条件。
结构规则的结构如下:
type Rule struct {
Name string `json:"name" datastore:"name,noindex"`
Active bool `json:"isActive" datastore:"active,noindex"`
Condition condition `json:"condition" datastore:"condition,noindex"`
}
条件也是一种结构-
type condition struct {
AdTargetingLogic adTargetingLogic `json:"adTargetingLogic"
datastore:"adTargetingLogic,noindex"`
AdUnit string `json:"adUnit" datastore:"adUnit,noindex"`
}
AdTargetingLogic是另一个结构-
type AdTargetingLogic struct {
Type string `json:"type" datastore:"type,noindex"`
Operands []operands `json:"operands" datastore:"operands,noindex"`
Operator string `json:"operator" datastore:"operator,noindex"`
}
Operands是另一个结构-
type operands struct {
Type string `json:"type" datastore:"type,noindex"`
Key string `json:"key" datastore:"key,noindex"`
Value string `json:"value" datastore:"value,noindex"`
}
在将规则保存和检索为数据存储区实体时,由于条件字段的嵌套结构,我遇到了问题。如果条件字段的结构没有像这样嵌套-
{"adTargetingLogic":{"operator":"AND","type":"EXPRESSION","operands":[{"key":"artlen","value":"small","type":"MATCH_AD_TARGETING"}]},"adUnit":"fiction"}
一切正常,但对于嵌套结构的条件字段来说>
{"adTargetingLogic":{"operator":"AND","type":"EXPRESSION","operands":[{"type":"MATCH_AD_TARGETING","key":"spon","value":"spon1"},{"key":"","value":"","type":"MATCH_AD_TARGETING"},{"operands":[{"type":"MATCH_AD_TARGETING","key":"trend","value":"trend1"},{"type":"MATCH_AD_TARGETING","key":"","value":""}],"operator":"AND","type":"EXPRESSION"}]},"adUnit":"fashion"}
问题不起作用。要解决此问题,在保存实体Rule时,我试图将条件字段编组为-
data, err := json.Marshal(ruleJS.Condition)
if err!= nil {
log.Errorf(ctx,"Marshal ERROR for rules %+v",err)
}
log.Errorf(ctx,"Marshal data for rules %+v",data)
ruleDS.Condition = string(data)
与此类似,在检索时,我将其编组为-
rJs := condition{}
err := json.Unmarshal([]byte(ruleDS.Condition), &rJs)
if err != nil {
log.Errorf(ctx," error while unmarshaling rules %+v",err)
}
ruleJS.Condition = rJs
我不知道该如何解决才能使其正常工作。