作為前 PHP 開發者,一說到 Golang 要把東西轉做 JSON 就頭痛,因為在 php 裡面你可以非常簡單的把一個複雜的結構轉換成 json,例如說:
就能夠輸出
所以在開發 php 的時候基本上是不用特別處理 json 的轉換的,到了 javascript 一端也能夠輕易的把收回來的資料直接使用,例如:
$.get("url_here",function(data){
console.log(data[0]);
});
// 輸出 "Hello"
但是去到 Golang 之後寫法就完全不同了,在這篇簡短的文章中,我會簡單介紹一下怎樣輕易的把任何資料 parse 成 JSON string 及由 JSON string 轉回原本型態的方法
Golang 的 Struct 是一樣很神奇的東西
甚麼是 Golang Struct 呢?這個跟 C 語言裡的沒差太遠,簡單來說就是 Golang 上 OOP 的方法。以下是一個簡單的 Struct 例子(原碼取自 ArOZ Online 1.0)
type desktopObject struct{
Filepath string;
Filename string;
Ext string;
IsDir bool;
IsShortcut bool;
IconX int;
IconY int;
}
把 Struct 轉換成 JSON
這是一個用來定義桌面上的物品的 struct。要把它轉到 JSON 十分簡單,首先你要新建一個 Object
thisFileObject := new(desktopObject)
然後把資料填進去,例如這樣
thisFileObject.Filepath = path;
thisFileObject.Filename = filepath.Base(path)
thisFileObject.Ext = filepath.Ext(path)
thisFileObject.IsDir = IsDir(path)
最後把它壓成一個 JSON String
jsonString, err:= json.Marshal(desktopFiles);
if (err != nil){
//錯誤處理
}
return string(jsonString);
就是這樣你的 JSON String 就做好了
由 JSON 轉回 Struct
這個就難一點了,但是還是能做到的。簡單來說就是把 JSON string map 到一個現有的 struct 上面去。先假設我們有以下的一個 struct
type iconLocation struct{
X int;
Y int;
}
和一個 JSON string
jsonstring := "你要轉換的東西"
首先你跟上面做的一樣,先預留一個變數給 json unmarshal 時用。然後把 json string 轉換到這個 struct 裡面。
thisLocation := new(iconLocation)
json.Unmarshal([]byte(jsonstring ), &thisLocation)
fmt.Println(thisLocation)
這樣你就完全把 JSON string 轉回去 struct 了。有夠簡單吧?