英文:
Not able to process json string data in golang struct
问题
我有一个字符串形式的 JSON 数据(来自第三方 API)。我无法在 Golang 中解码 JSON 字符串数据。
请帮忙。
JSON 字符串如下:
{
"data": {
"additional-30": {
"id_sales_rule_set": 255626,
"voucher_code": "PR35ZR5J5",
"from_date": "2015-06-16 16:19:22",
"to_date": "2018-09-28 23:59:59",
"conditions_ruleset": {
"subTotal": 0,
"category": {},
"customer": "0",
"paymentMethod": null,
"capOnDiscount": null,
"skuExclude": null,
"discountedItem": 0,
"discounted": 1500,
"taggedItem": null,
"segmentedVoucher": null,
"bundle": null,
"brand": null,
"mobileVoucher": null,
"itemAttribute": {}
},
"discount_type": "fixed",
"discount_percentage": null,
"discount_amount_default": 500
},
"abcd": {
"id_sales_rule_set": 255626,
"voucher_code": "PR35ZR5J5",
"from_date": "2015-06-16 16:19:22",
"to_date": "2018-09-28 23:59:59",
"conditions_ruleset": {
"subTotal": 0,
"category": {},
"customer": "0",
"paymentMethod": null,
"capOnDiscount": null,
"skuExclude": null,
"discountedItem": 0,
"discounted": 1500,
"taggedItem": null,
"segmentedVoucher": null,
"bundle": null,
"brand": null,
"mobileVoucher": null,
"itemAttribute": {}
},
"discount_type": "fixed",
"discount_percentage": null,
"discount_amount_default": 500
}
}
}
我想要获取数据的结构如下:
type ConditionsRuleset struct {
Brand interface{} `json:"brand"`
Bundle interface{} `json:"bundle"`
CapOnDiscount interface{} `json:"capOnDiscount"`
Category struct{} `json:"category"`
Customer string `json:"customer"`
Discounted int `json:"discounted"`
DiscountedItem int `json:"discountedItem"`
ItemAttribute struct{} `json:"itemAttribute"`
MobileVoucher interface{} `json:"mobileVoucher"`
PaymentMethod interface{} `json:"paymentMethod"`
SegmentedVoucher interface{} `json:"segmentedVoucher"`
SkuExclude interface{} `json:"skuExclude"`
SubTotal int `json:"subTotal"`
TaggedItem interface{} `json:"taggedItem"`
}
type PromoVoucher struct {
ConditionsRuleset ConditionsRuleset `json:"conditions_ruleset"`
DiscountAmountDefault int `json:"discount_amount_default"`
DiscountPercentage interface{} `json:"discount_percentage"`
DiscountType string `json:"discount_type"`
FromDate string `json:"from_date"`
IDSalesRuleSet int `json:"id_sales_rule_set"`
ToDate string `json:"to_date"`
VoucherCode string `json:"voucher_code"`
}
type PromoCacheData struct {
Data map[string]interface{} `json:"data"`
}
这是我想要处理 JSON 的代码:
by := []byte(<json字符串>)
tmp := new(PromoCacheData)
json.Unmarshal(by, tmp)
for k, value := range tmp.Data {
byc, _ := json.Marshal(value)
tmp2 := new(PromoVoucher)
json.Unmarshal(byc, tmp2)
fmt.Println(tmp2)
}
我得到的错误是:cannot range over *tmp (type PromoCacheData)
。
英文:
I have a json data in string (coming from third party API). I am not able to decode json string data in golang.
Please help.
JSON string =
{
"data" : {
"additional-30": {
"id_sales_rule_set": 255626,
"voucher_code": "PR35ZR5J5",
"from_date": "2015-06-16 16:19:22",
"to_date": "2018-09-28 23:59:59",
"conditions_ruleset": {
"subTotal": 0,
"category": {},
"customer": "0",
"paymentMethod": null,
"capOnDiscount": null,
"skuExclude": null,
"discountedItem": 0,
"discounted": 1500,
"taggedItem": null,
"segmentedVoucher": null,
"bundle": null,
"brand": null,
"mobileVoucher": null,
"itemAttribute": {}
},
"discount_type": "fixed",
"discount_percentage": null,
"discount_amount_default": 500
},
"abcd": {
"id_sales_rule_set": 255626,
"voucher_code": "PR35ZR5J5",
"from_date": "2015-06-16 16:19:22",
"to_date": "2018-09-28 23:59:59",
"conditions_ruleset": {
"subTotal": 0,
"category": {},
"customer": "0",
"paymentMethod": null,
"capOnDiscount": null,
"skuExclude": null,
"discountedItem": 0,
"discounted": 1500,
"taggedItem": null,
"segmentedVoucher": null,
"bundle": null,
"brand": null,
"mobileVoucher": null,
"itemAttribute": {}
},
"discount_type": "fixed",
"discount_percentage": null,
"discount_amount_default": 500
}
}
}
Struct in which I want to get data
type ConditionsRuleset struct {
Brand interface{} `json:"brand"`
Bundle interface{} `json:"bundle"`
CapOnDiscount interface{} `json:"capOnDiscount"`
Category struct{} `json:"category"`
Customer string `json:"customer"`
Discounted int `json:"discounted"`
DiscountedItem int `json:"discountedItem"`
ItemAttribute struct{} `json:"itemAttribute"`
MobileVoucher interface{} `json:"mobileVoucher"`
PaymentMethod interface{} `json:"paymentMethod"`
SegmentedVoucher interface{} `json:"segmentedVoucher"`
SkuExclude interface{} `json:"skuExclude"`
SubTotal int `json:"subTotal"`
TaggedItem interface{} `json:"taggedItem"`
}
type PromoVoucher struct {
ConditionsRuleset ConditionsRuleset `json:"conditions_ruleset"`
DiscountAmountDefault int `json:"discount_amount_default"`
DiscountPercentage interface{} `json:"discount_percentage"`
DiscountType string `json:"discount_type"`
FromDate string `json:"from_date"`
IDSalesRuleSet int `json:"id_sales_rule_set"`
ToDate string `json:"to_date"`
VoucherCode string `json:"voucher_code"`
}
type PromoCacheData struct {
Data map[string]interface{} `json:"data"`
}
Here is my code where I want to process json
by := []byte(<json string>)
tmp := new(PromoCacheData)
json.Unmarshal(by,tmp)
for k,value := range *tmp {
byc, _ := json.Marshal(value)
tmp2 := new(PromoVoucher)
json.Unmarshal(byc,tmp2)
fmt.Println(tmp2)
}
Error I am getting : cannot range over *tmp (type PromoCacheData)
答案1
得分: 1
你需要在循环中使用tmp.Data
而不是*tmp
。错误信息确切地指出了这一点。
英文:
You need to use tmp.Data
in for loop instead of *tmp
.
Error message says that exactly
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论