privat_fields.go 648 B

12345678910111213141516171819202122232425
  1. package extra
  2. import (
  3. "github.com/json-iterator/go"
  4. "unicode"
  5. )
  6. // SupportPrivateFields include private fields when encoding/decoding
  7. func SupportPrivateFields() {
  8. jsoniter.RegisterExtension(&privateFieldsExtension{})
  9. }
  10. type privateFieldsExtension struct {
  11. jsoniter.DummyExtension
  12. }
  13. func (extension *privateFieldsExtension) UpdateStructDescriptor(structDescriptor *jsoniter.StructDescriptor) {
  14. for _, binding := range structDescriptor.Fields {
  15. isPrivate := unicode.IsLower(rune(binding.Field.Name()[0]))
  16. if isPrivate {
  17. binding.FromNames = []string{binding.Field.Name()}
  18. binding.ToNames = []string{binding.Field.Name()}
  19. }
  20. }
  21. }