json.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package parser
  2. import (
  3. "encoding/json"
  4. "reflect"
  5. "github.com/langgenius/dify-plugin-daemon/internal/types/validators"
  6. )
  7. func UnmarshalJson[T any](text string) (T, error) {
  8. return UnmarshalJsonBytes[T]([]byte(text))
  9. }
  10. func UnmarshalJsonBytes[T any](data []byte) (T, error) {
  11. var result T
  12. err := json.Unmarshal(data, &result)
  13. if err != nil {
  14. return result, err
  15. }
  16. // skip validate if T is a map
  17. if reflect.TypeOf(result).Kind() == reflect.Map {
  18. return result, nil
  19. }
  20. if err := validators.GlobalEntitiesValidator.Struct(&result); err != nil {
  21. return result, err
  22. }
  23. return result, err
  24. }
  25. func MarshalJson[T any](data T) string {
  26. b, _ := json.Marshal(data)
  27. return string(b)
  28. }
  29. func MarshalJsonBytes[T any](data T) []byte {
  30. b, _ := json.Marshal(data)
  31. return b
  32. }
  33. func UnmarshalJsonBytes2Map(data []byte) (map[string]any, error) {
  34. result := map[string]any{}
  35. err := json.Unmarshal(data, &result)
  36. return result, err
  37. }
  38. func UnmarshalJson2Map(json string) (map[string]any, error) {
  39. return UnmarshalJsonBytes2Map([]byte(json))
  40. }