json.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright 2025 BackendServerTemplate Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package configparser
  5. import (
  6. "encoding/json"
  7. "fmt"
  8. "github.com/SongZihuan/BackendServerTemplate/src/config/configerror"
  9. "os"
  10. "reflect"
  11. )
  12. type JsonProvider struct {
  13. HasRead bool
  14. FileData []byte
  15. }
  16. func NewJsonProvider() *JsonProvider {
  17. return &JsonProvider{
  18. HasRead: false,
  19. FileData: nil,
  20. }
  21. }
  22. func (j *JsonProvider) CanUTF8() bool {
  23. return true
  24. }
  25. func (j *JsonProvider) ReadFile(filepath string) configerror.Error {
  26. if j.HasRead {
  27. return configerror.NewErrorf("config file has been read")
  28. }
  29. data, err := os.ReadFile(filepath)
  30. if err != nil {
  31. return configerror.NewErrorf(fmt.Sprintf("read file error: %s", err.Error()))
  32. }
  33. j.FileData = data
  34. j.HasRead = true
  35. return nil
  36. }
  37. func (j *JsonProvider) ParserFile(target any) configerror.Error {
  38. if !j.HasRead || j.FileData == nil {
  39. return configerror.NewErrorf("config file has not been read")
  40. }
  41. if reflect.TypeOf(target).Kind() != reflect.Pointer {
  42. return configerror.NewErrorf("target must be a pointer")
  43. }
  44. err := json.Unmarshal(j.FileData, target)
  45. if err != nil {
  46. return configerror.NewErrorf("json parser error: %s", err.Error())
  47. }
  48. return nil
  49. }
  50. func (j *JsonProvider) WriteFile(filepath string, src any) configerror.Error {
  51. if !j.HasRead {
  52. return configerror.NewErrorf("config file has not been read")
  53. }
  54. if reflect.TypeOf(src).Kind() != reflect.Pointer {
  55. return configerror.NewErrorf("target must be a pointer")
  56. }
  57. target, err := json.Marshal(src)
  58. if err != nil {
  59. return configerror.NewErrorf("json marshal error: %s", err.Error())
  60. }
  61. err = os.WriteFile(filepath, target, 0644)
  62. if err != nil {
  63. return configerror.NewErrorf("write file error: %s", err.Error())
  64. }
  65. return nil
  66. }
  67. func _testJson() {
  68. var a ConfigParserProvider
  69. a = &JsonProvider{}
  70. _ = a
  71. }