我認爲,如果你有機會獲得的IPFilePair
定義,創建你添加MarshanJSON()
到net.IP
當地的typedef是要走的路:
package main
import (
"encoding/json"
"net"
"fmt"
)
type netIP net.IP
type IPFilePair struct {
IP netIP
FileName string
}
type IPFilePairs []*IPFilePair
func (ip netIP) MarshalJSON() ([]byte, error) {
return json.Marshal(net.IP(ip).String())
}
func main() {
pair1 := IPFilePair{netIP{127, 0, 0, 1}, "file1"}
pair2 := IPFilePair{netIP{127, 0, 0, 2}, "file2"}
sample_ipfilepairs := IPFilePairs{&pair1, &pair2}
b, _ := json.Marshal(sample_ipfilepairs)
fmt.Println(string(b))
}
此輸出:
[{"IP":"127.0.0.1","FileName":"file1"},{"IP":"127.0.0.2","FileName":"file2"}]
中當然,如果您需要將其重新編組爲相同的Go數據結構,則需要使用net.ParseIP
在netIP
上實現UnmarshalJSON()
。
我真的好奇,如果有人知道一個更簡單的方法來完成這一點。
甜,那是做的工作。 – Aaronneyer
很遺憾,你不能直接將'MarshalJSON'方法直接添加到'net.IP'中,但我想這是能夠獨立於完整程序編譯模塊所需的限制之一。 –
@JamesHenstridge。同意。這是我知道如何去做的最好方法,但我希望有人能比Go更流暢地展示一個更簡單的解決方案。 –