2 回答

TA貢獻2037條經驗 獲得超6個贊
最簡潔的答案是不。該語言不允許您在結構中嵌入任何一種類型(切片或映射)。
只需使用一個map[string]interface{}
. 處理這樣一個事實,即“key1”和“key2”的值是字符串,而其他所有內容都是其他地方的浮點數。這確實是您獲得該輸出的唯一方法。您可以根據需要使問題變得盡可能復雜(例如轉換為更像您的類型或其他類型)但如果您反對實現MarshalJSON
唯一能夠產生您想要的結果的模型是map[string]interface{}

TA貢獻1789條經驗 獲得超8個贊
我知道已經有一個可接受的答案,但實際上您可以獲得指定的“所需的平面 json 對象”。
“RowData”不完全是map[string]float; 獲取它的類型將產生“main.RowData”(如果它在包 main 中)。它可以嵌入到結構中。以這個例子,改編自原來的帖子:
package main
import (
"encoding/json"
"fmt"
)
type Row struct {
Key1 string
Key2 string
RowData
}
type RowData map[string]float64
func main() {
row := Row{
RowData: make(map[string]float64),
}
row.RowData["15/04"] = 1.3
row.RowData["15/05"] = 1.2
row.RowData["17/08"] = 0.8
row.Key1 = "value one"
row.Key2 = "value two"
flatJSON, _ := json.Marshal(row)
fmt.Println(string(flatJSON))
}
這將產生:
{"Key1":"value one","Key2":"value two","RowData":{"15/04":1.3,"15/05":1.2,"17/08":0.8}}
字段名稱必須大寫才能導出,但您可以使用結構標記使它們與問題中指定的確切字符串匹配。
- 2 回答
- 0 關注
- 191 瀏覽
添加回答
舉報