json - Golang切片到名称值对的json数组
问题描述
我有以下结构的一部分。
type ParamStruct struct {
Paramname string
Paramvalue interface{}
}
该值可以是一个 int、float 的字符串。我需要将看起来像这样的切片转换为如下所示[{name1 95} {name2 someStrValue} {name3 someOtherStrValue}]
的 JSON 数组。
[
{ "name1": 1 },
{ "name2": "someStrValue"},
{ "name3": "someOtherStrValue"}
]
我尝试使用默认函数进行封送处理并获得这样的 JSON 输出..
[{"Paramname":"name1","Paramvalue":95},{"Paramname":"name2","Paramvalue":"someStrValue"},{"Paramname":"name3","Paramvalue":"someOtherStrValue"}]
输出 JSON 必须是名称-值对,如上所示。关于如何获得所需格式的 JSON 输出的任何建议?
这是完整的代码示例
package main
import (
"encoding/json"
"fmt"
)
type ParamStruct struct {
Paramname string
Paramvalue interface{}
}
func main() {
paramlist1 := make([]ParamStruct, 3)
paramlist1[0].Paramname = "name1"
paramlist1[0].Paramvalue = 95
paramlist1[1].Paramname = "name2"
paramlist1[1].Paramvalue = "someStrValue"
paramlist1[2].Paramname = "name3"
paramlist1[2].Paramvalue = "someOtherStrValue"
fmt.Println(paramlist1)
js, err := json.Marshal(paramlist1)
if err != nil {
fmt.Printf("Error: %s", err.Error())
} else {
fmt.Println(string(js))
}
}
解决方案
你可以实现json.Marshaler
接口。
例如:
type ParamStruct struct {
Paramname string
Paramvalue interface{}
}
func (ps ParamStruct) MarshalJSON() ([]byte, error) {
return json.Marshal(map[string]interface{}{ps.Paramname: ps.Paramvalue})
}
推荐阅读
- sql - 有两个条件的 SQL 案例
- java - Minecraft Bukkit 编码类型不匹配:无法从元素类型 Object 转换为 String
- kubernetes - 如何在 Google Kubernetes 集群 (GKE) 中移除 GPU
- c# - 如何在 ASP.NET Core Angular 应用程序中使用 SignalR Stream?
- terraform - 如何使用 terraform 过滤 ec2 实例的关联安全组
- c# - C# Winforms 应用程序从命令提示符和调试器中打开,但不是从文件资源管理器中打开
- amazon-s3 - 将多个文件上传到 AWS S3 存储桶而不覆盖现有对象
- java - Can't figure out For Loop
- html - 如何让我的导航栏响应平板电脑?
- python-3.x - 为什么这个特定的函数返回“无”;我试图展示一个不断增长的列表?