json.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package common
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io"
  6. )
  7. func Unmarshal(data []byte, v any) error {
  8. return json.Unmarshal(data, v)
  9. }
  10. func UnmarshalJsonStr(data string, v any) error {
  11. return json.Unmarshal(StringToByteSlice(data), v)
  12. }
  13. func DecodeJson(reader io.Reader, v any) error {
  14. return json.NewDecoder(reader).Decode(v)
  15. }
  16. func Marshal(v any) ([]byte, error) {
  17. return json.Marshal(v)
  18. }
  19. func GetJsonType(data json.RawMessage) string {
  20. trimmed := bytes.TrimSpace(data)
  21. if len(trimmed) == 0 {
  22. return "unknown"
  23. }
  24. firstChar := trimmed[0]
  25. switch firstChar {
  26. case '{':
  27. return "object"
  28. case '[':
  29. return "array"
  30. case '"':
  31. return "string"
  32. case 't', 'f':
  33. return "boolean"
  34. case 'n':
  35. return "null"
  36. default:
  37. return "number"
  38. }
  39. }
  40. // JsonRawMessageToString returns JSON strings as their decoded value and other JSON values as raw text.
  41. func JsonRawMessageToString(data json.RawMessage) string {
  42. trimmed := bytes.TrimSpace(data)
  43. if len(trimmed) == 0 || bytes.Equal(trimmed, []byte("null")) {
  44. return ""
  45. }
  46. if trimmed[0] != '"' {
  47. return string(trimmed)
  48. }
  49. var value string
  50. if err := Unmarshal(trimmed, &value); err != nil {
  51. return string(trimmed)
  52. }
  53. return value
  54. }