gpt4 book ai didi

go - 在 Go 中具有非标准字段的结构数组上的 MarshalJSON

转载 作者:IT王子 更新时间:2023-10-29 01:24:54 25 4
gpt4 key购买 nike

我有以下类型:

type IPFilePair struct {
IP net.IP
FileName string
}

type IPFilePairs []*IPFilePair

我正在尝试使用 json.Marshal(sample_ipfilepairs) 编码此 JSON,但由于 IP 不是字符串,它会将其更改为奇怪的内容。

将这个输出 IP 的 JSON 作为字符串的正确方法是什么?

最佳答案

我认为如果您有权访问 IPFilePair 的定义,创建 net.IP 的本地类型定义,然后将 MarshanJSON() 添加到是要走的路:

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 数据结构,您需要在 netIP 上使用 实现 UnmarshalJSON() net.ParseIP.

我当然很好奇是否有人知道实现此目的的更简单方法。

关于go - 在 Go 中具有非标准字段的结构数组上的 MarshalJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com