pretty code

2023年1月11日 星期三

JSON array with array value in Go

太久沒寫 Golang 了,今天幫一個同事轉資料,資料格式類似 array 裡面又是 array,以 C 語言來類比就是 2 維陣列(真實例子比較複雜,維度有到 3 維,但概念是一樣的)。

一開始只想到用 struct 來定義格式並忽略欄位名稱,但這方式其實是錯的,還好後來有找回記憶,簡單記錄一下避免忘記。

簡單來說,Golang 的 struct 對應的是 JSON object,slice 對應的才是 JSON array,把握這個原則,JSON 應該就難不倒你了。

當然相比 Javascript 或是 Python,Go 內建的 encoding/json 模組確實沒那麼好用,網路上有很多人另外寫了 encoder/decoder 或是 parser,可以去 github 挑一個順眼的來用。

網路上也有神人寫好對應的 tool,可以來這裡測試。

另外,JSON 第一層一定要是 Object,不能是 Array。

想要的格式

{
    "array1": [
        [
            1,
            2,
            3
        ],
        [
            4,
            5,
            6
        ]
    ],
    "array2": [
        [
            1,
            2,
            3
        ],
        [
            4,
            5,
            6
        ]
    ]
}

程式碼

func main() {
array1 := [][]int{
{1, 2, 3},
{4, 5, 6},
}

array2 := [][]int{
{1, 2, 3},
{4, 5, 6},
}

arrays := make(map[string][][]int)

arrays["array1"] = array1
arrays["array2"] = array2

jsonStr, _ := json.MarshalIndent(arrays, "", "    ")

fmt.Println(string(jsonStr))
}

沒有留言: