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()方法进行转换。

回到顶部