You've already forked json-iterator
							
							
				mirror of
				https://github.com/json-iterator/go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	fix #276 allow rename when set naming strategy
This commit is contained in:
		| @@ -2,6 +2,7 @@ package extra | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"github.com/json-iterator/go" | 	"github.com/json-iterator/go" | ||||||
|  | 	"strings" | ||||||
| 	"unicode" | 	"unicode" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -17,6 +18,16 @@ type namingStrategyExtension struct { | |||||||
|  |  | ||||||
| func (extension *namingStrategyExtension) UpdateStructDescriptor(structDescriptor *jsoniter.StructDescriptor) { | func (extension *namingStrategyExtension) UpdateStructDescriptor(structDescriptor *jsoniter.StructDescriptor) { | ||||||
| 	for _, binding := range structDescriptor.Fields { | 	for _, binding := range structDescriptor.Fields { | ||||||
|  | 		tag, hastag := binding.Field.Tag().Lookup("json") | ||||||
|  | 		if hastag { | ||||||
|  | 			tagParts := strings.Split(tag, ",") | ||||||
|  | 			if tagParts[0] == "-" { | ||||||
|  | 				continue // hidden field | ||||||
|  | 			} | ||||||
|  | 			if tagParts[0] != "" { | ||||||
|  | 				continue // field explicitly named | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 		binding.ToNames = []string{extension.translate(binding.Field.Name())} | 		binding.ToNames = []string{extension.translate(binding.Field.Name())} | ||||||
| 		binding.FromNames = []string{extension.translate(binding.Field.Name())} | 		binding.FromNames = []string{extension.translate(binding.Field.Name())} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -21,3 +21,30 @@ func Test_lower_case_with_underscores(t *testing.T) { | |||||||
| 	should.Nil(err) | 	should.Nil(err) | ||||||
| 	should.Equal(`{"user_name":"taowen","first_language":"Chinese"}`, string(output)) | 	should.Equal(`{"user_name":"taowen","first_language":"Chinese"}`, string(output)) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func Test_set_naming_strategy_with_overrides(t *testing.T) { | ||||||
|  | 	should := require.New(t) | ||||||
|  | 	SetNamingStrategy(LowerCaseWithUnderscores) | ||||||
|  | 	output, err := jsoniter.Marshal(struct { | ||||||
|  | 		UserName      string `json:"UserName"` | ||||||
|  | 		FirstLanguage string | ||||||
|  | 	}{ | ||||||
|  | 		UserName:      "taowen", | ||||||
|  | 		FirstLanguage: "Chinese", | ||||||
|  | 	}) | ||||||
|  | 	should.Nil(err) | ||||||
|  | 	should.Equal(`{"UserName":"taowen","first_language":"Chinese"}`, string(output)) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func Test_set_naming_strategy_with_omitempty(t *testing.T) { | ||||||
|  | 	should := require.New(t) | ||||||
|  | 	SetNamingStrategy(LowerCaseWithUnderscores) | ||||||
|  | 	output, err := jsoniter.Marshal(struct { | ||||||
|  | 		UserName      string | ||||||
|  | 		FirstLanguage string `json:",omitempty"` | ||||||
|  | 	}{ | ||||||
|  | 		UserName: "taowen", | ||||||
|  | 	}) | ||||||
|  | 	should.Nil(err) | ||||||
|  | 	should.Equal(`{"user_name":"taowen"}`, string(output)) | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user