亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將地圖嵌入到結構中以使其具有平面 json 表示

如何將地圖嵌入到結構中以使其具有平面 json 表示

Go
DIEA 2021-10-18 14:15:34
為了創建類似表格的結構,我在之前的應用程序中按以下格式序列化了我的行數據:{ "key1": "...", "key2": "...", "15/04": 1.3, "15/05": 1.2, .... "17/08": 0.8 }現在我正在嘗試用 Go 重寫它,以便通過實踐經驗學習這門語言。在 Go 中,可以通過將兩個結構嵌入到另一個結構中來將它們組合在一起。來自該結構的編組 json 將具有平面結構,即生成的 json 對象將具有第一個和第二個結構的字段的聯合,而無需嵌套。這是一個例子:https : //play.golang.org/p/jbJykip7pw(來自http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/)我想我也可以將映射嵌入到結構中,以便我可以使用以下類型定義在 json 之上編組:type Row struct {    key1 string    key2 string    RowData}type RowData map[string]float64...func main() {    row := Row{        "...",        "...",        RowData{            "15/04": 1.3, "15/05": 1.2, .... "17/08": 0.8,        },    }}但這在我的 'Row' 對象中創建了一個字段 'RowData' 字段,而不是將 RowData 中的條目附加到我想要的平面 json 對象中:{ "key1": "...", "key2": "...", "RowData": { "15/04": 1.3, "15/05": 1.2, .... "17/08": 0.8 } }我想知道,是否有一種方法可以將映射或切片嵌入到結構中,以便生成的 json 對象是平面的,而無需MarshalJSON在 type 上定義函數Row?
查看完整描述

2 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

最簡潔的答案是不。該語言不允許您在結構中嵌入任何一種類型(切片或映射)。

只需使用一個map[string]interface{}. 處理這樣一個事實,即“key1”和“key2”的值是字符串,而其他所有內容都是其他地方的浮點數。這確實是您獲得該輸出的唯一方法。您可以根據需要使問題變得盡可能復雜(例如轉換為更像您的類型或其他類型)但如果您反對實現MarshalJSON唯一能夠產生您想要的結果的模型是map[string]interface{}


查看完整回答
反對 回復 2021-10-18
?
拉丁的傳說

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

字段名稱必須大寫才能導出,但您可以使用結構標記使它們與問題中指定的確切字符串匹配。


查看完整回答
反對 回復 2021-10-18
  • 2 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號