我想构建与以下PurchaseOrder结构等效的JSON :
type PurchaseOrder struct {
State string
FsmName string
Supplier string
Receiver string
TradeItems map[string]PRTradeItem
}
type PRTradeItem struct {
Quantity float64 `json:"quantity"`
Supplier string `json:"supplier"`
Receiver string `json:"receiver"`
PricePerUnit float64 `json:"pricePerUnit"`
}
Run Code Online (Sandbox Code Playgroud)
为了做到这一点,我做了以下工作:
po := make(map[string]interface{})
po["Sender"] = "org2"
po["Receiver"] = "org1"
po["TradeItems"] = make(map[string]PRTradeItem)
po["TradeItems"]["sku1"] = PRTradeItem{Quantity: 100, Supplier: "org2", Receiver: "org1", PricePerUnit: 10.5}
poAsBytes, _ := JSON.Marshal(po)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
无效的操作:po [“ TradeItems”] [“ sku1”](类型接口{}不支持索引)。
在四处浏览后,我在代码中添加了以下几行,并且可以正常工作。
internalMap, ok := po["TradeItems"].(map[string]PRTradeItem)
if !ok{
panic("why???")
}
if ok{
internalMap["sku1"] = PRTradeItem{Quantity:100,Supplier:"org2", Receiver:"org1", PricePerUnit:10.5}
}
Run Code Online (Sandbox Code Playgroud)
我不太明白这行是什么意思
internalMap, ok := po["TradeItems"].(map[string]PRTradeItem)
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?
我想在下面构建与PurchaseOrder结构等效的JSON:
Run Code Online (Sandbox Code Playgroud)type PurchaseOrder struct { State string FsmName string Supplier string Receiver string TradeItems map[string]PRTradeItem }
最简单的方法是:
po := PurchaseOrder{
State: "paid",
Supplier: "Acme, Inc.",
TradeItems: map[string]PRTradeItem{
"sku1": PRTradeItem{Quantity: 100, Supplier: "org2", ... },
},
}
poAsBytes, err := json.Marshal(po)
Run Code Online (Sandbox Code Playgroud)
忘记您po := make(map[string]interface{})对地图的手动操作。
如果您需要控制PurchaseOrder对象中的JSON键,请json像PRTradeItem定义一样添加适当的标签。
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |