1 Star 1 Fork 2

kristas / booting-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
converter.go 2.60 KB
一键复制 编辑 原始数据 按行查看 历史
package converter
import (
"encoding/json"
"fmt"
"gopkg.in/yaml.v3"
"strings"
)
func YamlToProperties(yml []byte) map[string]interface{} {
var m map[string]interface{}
yaml.Unmarshal(yml, &m)
return MapToProperties(m)
}
func JsonToProperties(_json []byte) map[string]interface{} {
var m map[string]interface{}
json.Unmarshal(_json, &m)
return MapToProperties(m)
}
func MapToProperties(m map[string]interface{}) map[string]interface{} {
return buildProperties("", m, make(map[string]interface{}))
}
func PropertiesToString(object map[string]interface{}) string {
var s []string
for k, v := range object {
s = append(s, fmt.Sprintln(k, "=", v))
}
return strings.Join(s, "")
}
func buildProperties(prePath string, m, tmp map[string]interface{}) map[string]interface{} {
for k, v := range m {
switch v.(type) {
case map[string]interface{}:
buildProperties(path(prePath, k), v.(map[string]interface{}), tmp)
default:
tmp[path(prePath, k)] = v
}
}
return tmp
}
func path(first, second string) string {
if first == "" {
return second
}
return first + "." + second
}
func PropertiesToMap(m map[string]interface{}) map[string]interface{} {
tmp := make(map[string]interface{})
for k, v := range m {
buildMap(k, v, tmp)
}
return tmp
}
func buildMap(path string, val interface{}, tmp map[string]interface{}) map[string]interface{} {
arr := strings.SplitN(path, ".", 2)
if len(arr) > 1 {
key := arr[0]
next := arr[1]
if tmp[key] == nil {
tmp[key] = make(map[string]interface{})
}
tmp[key] = buildMap(next, val, tmp[key].(map[string]interface{}))
} else {
tmp[path] = val
}
return tmp
}
func MergeProperties(m ...map[string]interface{}) map[string]interface{} {
var r = make(map[string]interface{})
for i := range m {
for k, v := range m[i] {
r[k] = v
}
}
return r
}
func MergeMap(m ...map[string]interface{}) map[string]interface{} {
var propertiesArr []map[string]interface{}
for i := range m {
propertiesArr = append(propertiesArr, MapToProperties(m[i]))
}
properties := MergeProperties(propertiesArr...)
return PropertiesToMap(properties)
}
func MergeYaml(yml ...[]byte) []byte {
var maps []map[string]interface{}
for i := range yml {
var m map[string]interface{}
yaml.Unmarshal(yml[i], &m)
maps = append(maps, m)
}
mergeMap := MergeMap(maps...)
bytes, _ := yaml.Marshal(mergeMap)
return bytes
}
func MergeJson(jsn ...[]byte) []byte {
var maps []map[string]interface{}
for i := range jsn {
var m map[string]interface{}
json.Unmarshal(jsn[i], &m)
maps = append(maps, m)
}
mergeMap := MergeMap(maps...)
bytes, _ := yaml.Marshal(mergeMap)
return bytes
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/kristas/booting-go.git
git@gitee.com:kristas/booting-go.git
kristas
booting-go
booting-go
v1.3.1

搜索帮助

344bd9b3 5694891 D2dac590 5694891