yaml.go 869 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package json
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "gopkg.in/yaml.v2"
  6. )
  7. // FromYAML convert yaml to json
  8. func FromYAML(v []byte) ([]byte, error) {
  9. m1 := make(map[interface{}]interface{})
  10. err := yaml.Unmarshal(v, &m1)
  11. if err != nil {
  12. return nil, err
  13. }
  14. m2 := convert(m1)
  15. j, err := json.Marshal(m2)
  16. if err != nil {
  17. return nil, err
  18. }
  19. return j, nil
  20. }
  21. func convert(m map[interface{}]interface{}) map[string]interface{} {
  22. res := map[string]interface{}{}
  23. for k, v := range m {
  24. var value interface{}
  25. switch v2 := v.(type) {
  26. case map[interface{}]interface{}:
  27. value = convert(v2)
  28. case []interface{}:
  29. for i, el := range v2 {
  30. if m, ok := el.(map[interface{}]interface{}); ok {
  31. v2[i] = convert(m)
  32. }
  33. }
  34. value = v2
  35. default:
  36. value = v
  37. }
  38. key := "null"
  39. if k != nil {
  40. key = fmt.Sprint(k)
  41. }
  42. res[key] = value
  43. }
  44. return res
  45. }