json.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. typ := reflect.TypeOf(result)
  18. if typ.Kind() == reflect.Map {
  19. return result, nil
  20. } else if typ.Kind() == reflect.String {
  21. return result, nil
  22. }
  23. if err := validators.GlobalEntitiesValidator.Struct(&result); err != nil {
  24. return result, err
  25. }
  26. return result, err
  27. }
  28. func UnmarshalJsonBytes2Slice[T any](data []byte) ([]T, error) {
  29. var result []T
  30. err := json.Unmarshal(data, &result)
  31. if err != nil {
  32. return nil, err
  33. }
  34. for _, item := range result {
  35. if err := validators.GlobalEntitiesValidator.Struct(&item); err != nil {
  36. return nil, err
  37. }
  38. }
  39. return result, err
  40. }
  41. func MarshalJson[T any](data T) string {
  42. b, _ := json.Marshal(data)
  43. return string(b)
  44. }
  45. func MarshalJsonBytes[T any](data T) []byte {
  46. b, _ := json.Marshal(data)
  47. return b
  48. }
  49. func UnmarshalJsonBytes2Map(data []byte) (map[string]any, error) {
  50. result := map[string]any{}
  51. err := json.Unmarshal(data, &result)
  52. return result, err
  53. }
  54. func UnmarshalJson2Map(json string) (map[string]any, error) {
  55. return UnmarshalJsonBytes2Map([]byte(json))
  56. }