Golang如何将多个数组合并成单个值的JSON?
Golang如何将多个数组合并成单个值的JSON? 大家好,我有一个嵌套的JSON值,如何将它们合并成如下所示的单值JSON?感谢您的帮助。
data := gjson.GetMany(json, "results.0.series.#.tags.host", "results.0.series.#.values.1.1")
fmt.Println(data)
result:
[
"service-a",
"service-b",
]
[
0.02501250625561197,
0.1251251251165223,
]
expected:
[
{
"service-a": "0.02501250625561197",
"service-b": "0.1251251251165223",
}
]
我尝试了类似下面的迭代,但仍然失败了。
var m map[string]interface {}
for k, v := range value {
m[data[k]] = v
}
fmt.Println(m)
更多关于Golang如何将多个数组合并成单个值的JSON?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang如何将多个数组合并成单个值的JSON?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你可以通过遍历两个数组来构建所需的JSON结构。以下是一个示例实现:
package main
import (
"encoding/json"
"fmt"
"github.com/tidwall/gjson"
)
func main() {
jsonStr := `{
"results": [{
"series": [{
"tags": {"host": "service-a"},
"values": [[null, 0.02501250625561197]]
}, {
"tags": {"host": "service-b"},
"values": [[null, 0.1251251251165223]]
}]
}]
}`
// 获取两个数组
data := gjson.GetMany(jsonStr,
"results.0.series.#.tags.host",
"results.0.series.#.values.1.1")
hosts := data[0].Array()
values := data[1].Array()
// 创建map并填充数据
resultMap := make(map[string]string)
for i := 0; i < len(hosts) && i < len(values); i++ {
resultMap[hosts[i].String()] = values[i].String()
}
// 将map包装到slice中以满足期望的输出格式
result := []map[string]string{resultMap}
// 转换为JSON
jsonBytes, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(jsonBytes))
}
输出结果:
[
{
"service-a": "0.02501250625561197",
"service-b": "0.1251251251165223"
}
]
如果你的数据来自不同的JSON路径,需要确保两个数组的长度一致。如果值类型不是字符串但需要字符串输出,可以使用.String()方法进行转换。

