gpt4 book ai didi

json - Go - 在 json.Marshal 中自动将字符串值转换为 int 值

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:00 32 4
gpt4 key购买 nike

我有 []map[string]string。存在的值可以是整数(以字符串形式)“1”。我想自动转换为 int 值,如 1。

例子:

map1 := []map[string]string{
{"k1": "1", "k2": "some value"},
{"k1": "-12", "k2": "some value"},
}

我想像这样使用 json.marshal 将它转换为 json

 {{"k1":1,"k2":"some value"}{"k1":-12,"k1":"some value"}}

我该如何实现。

最佳答案

您可以创建自定义类型,并在该类型上实现 json.Marshaller 接口(interface)。该方法实现可以透明地进行 string -> int 转换:

type IntValueMarshal []map[string]string

func (ivms IntValueMarshal) MarshalJSON() ([]byte, error) {
// create a new map to hold the converted elements
mapSlice := make([]map[string]interface{}, len(ivms))

// range each of the maps
for i, m := range ivms {
intVals := make(map[string]interface{})

// attempt to convert each to an int, if not, just use value
for k, v := range m {
iv, err := strconv.Atoi(v)
if err != nil {
intVals[k] = v
continue
}
intVals[k] = iv
}

mapSlice[i] = intVals
}
// marshal using standard marshaller
return json.Marshal(mapSlice)
}

要使用它,像这样:

values := []map[string]string{
{"k1": "1", "k2": "somevalue"},
}

json.Marshal(IntValueMarshal(values))

关于json - Go - 在 json.Marshal 中自动将字符串值转换为 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50872091/

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