Golang中如何为JSON对象添加括号
Golang中如何为JSON对象添加括号 大家好,
我是Go语言的新手,在处理JSON对象时遇到了一些困难。
我正在编写一个应用程序,用于将接收到的数据传输给客户端。
客户端只接受外部带有方括号的JSON对象,如下所示:
[{"variable":"temperature","fields":{"value":"25","quality":5},"timestamp":"2021-03-23T17:23:51Z"}]
我能够使用附带的代码创建如下所示的JSON对象:
{"variable":"temperature","fields":{"value":"25","quality":5},"timestamp":"2021-03-23T17:23:51Z"}
我正在寻找一种方法来自动为我的JSON对象添加这些方括号。
这是我的代码:
type epde_fields struct {
Value string `json:"value"`
Quality int32 `json:"quality"`
}
type epde_format struct {
Variable string `json:"variable"`
Fields epde_fields `json:"fields"`
Timestamp string `json:"timestamp"`
}
func SendData(xcontext *appcontext.Context, params ...interface{}) (bool, interface{}) {
if len(params) < 1 {
// We didn't receive a result
return false, nil
}
token := get_token()
//print token
fmt.Println("token has been received:", token)
sensor_name := extractValue(params[0].(string), "name")
value := extractValue(params[0].(string), "value")
t := extractValue(params[0].(string), "origin")
cv, _ := strconv.ParseInt(t, 10, 64)
timestamp := time.Unix(cv/1000000000, 0)
field := epde_fields{
Value: value,
Quality: 5,
}
tmp := epde_format{
Variable: sensor_name,
Fields: field,
Timestamp: timestamp.Format("2006-01-02T15:04:05Z"),
}
payload, err := json.Marshal(tmp)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(string(payload))
}
请问你能帮我解决这个问题吗?
谢谢
更多关于Golang中如何为JSON对象添加括号的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
何不将其包装成 []epde_format 或 [1]epde_format 然后进行序列化呢?
要将单个JSON对象包装在方括号中,最简单的方法是将其转换为切片。以下是修改后的代码示例:
func SendData(xcontext *appcontext.Context, params ...interface{}) (bool, interface{}) {
if len(params) < 1 {
return false, nil
}
token := get_token()
fmt.Println("token has been received:", token)
sensor_name := extractValue(params[0].(string), "name")
value := extractValue(params[0].(string), "value")
t := extractValue(params[0].(string), "origin")
cv, _ := strconv.ParseInt(t, 10, 64)
timestamp := time.Unix(cv/1000000000, 0)
field := epde_fields{
Value: value,
Quality: 5,
}
tmp := epde_format{
Variable: sensor_name,
Fields: field,
Timestamp: timestamp.Format("2006-01-02T15:04:05Z"),
}
// 将单个对象包装在切片中
dataSlice := []epde_format{tmp}
payload, err := json.Marshal(dataSlice)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(string(payload))
}
如果你需要处理多个对象,可以直接使用切片:
// 创建包含多个对象的切片
dataSlice := []epde_format{
tmp,
// 可以添加更多对象
}
payload, err := json.Marshal(dataSlice)
这样生成的JSON就会自动包含外层的方括号,符合客户端的要求。

