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 回复

谢谢 @skillia

更多关于Golang中如何为JSON对象添加括号的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


何不将其包装成 []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就会自动包含外层的方括号,符合客户端的要求。

回到顶部