Feature(v2):jsonToStruct supports interface type assignment (#41)

* Feature(v2):jsonToStruct supports interface type assignment

close #38

- `JsonToStruct` 支持基本数据类型中定义 `interface{}`
- `JsonToStruct` 支持基本数据类型中定义 `any`
- 对于 `parsePrimitiveValue` 的 `string` 类型转义兼容
- 对于 `parsePrimitiveValue` 的 `bool` 类型转义兼容
This commit is contained in:
jeffery
2023-05-12 18:44:30 +08:00
committed by GitHub
parent 6f6ea53714
commit da0e416c8d
6 changed files with 149 additions and 64 deletions

View File

@@ -418,6 +418,113 @@ func TestJsonToStructMoreNest2(t *testing.T) {
}
}
// 普通数据类型定义 interface
func TestJsonToStructAny1(t *testing.T) {
jsonData := `{
"name": "make",
"age": "10"
}`
type Target struct {
Name interface{} `json:"name"`
Age uint `json:"age"`
}
var target Target
err := JsonToStruct(jsonData, &target)
if err != nil {
t.Errorf("err %s", err)
return
}
}
// 普通数据类型定义 any
func TestJsonToStructAny2(t *testing.T) {
jsonData := `{
"name": "make",
"age": "10"
}`
type Target struct {
Name any `json:"name"`
Age uint `json:"age"`
}
var target Target
err := JsonToStruct(jsonData, &target)
if err != nil {
t.Errorf("err %s", err)
return
}
}
// slice 中包含 interface
func TestJsonToStructAny3(t *testing.T) {
jsonData := `{
"name": ["make",6,"tom"]
}`
type Target struct {
Name []interface{} `json:"name"`
}
var target Target
err := JsonToStruct(jsonData, &target)
if err != nil {
t.Errorf("err %s", err)
return
}
}
// slice 中包含 any
func TestJsonToStructAny4(t *testing.T) {
jsonData := `{
"name": ["make",6,"tom"]
}`
type Target struct {
Name []any `json:"name"`
}
var target Target
err := JsonToStruct(jsonData, &target)
if err != nil {
t.Errorf("err %s", err)
return
}
fmt.Println(target, err)
}
// map 中包含 interface
func TestJsonToStructAny5(t *testing.T) {
jsonData := `{
"name": {
"key1": "mike",
"key2": 666
}
}`
type Target struct {
Name map[string]interface{} `json:"name"`
}
var target Target
err := JsonToStruct(jsonData, &target)
if err != nil {
t.Errorf("err %s", err)
return
}
}
// map 中包含 any
func TestJsonToStructAny6(t *testing.T) {
jsonData := `{
"name": {
"key1": "mike",
"key2": 666
}
}`
type Target struct {
Name map[string]any `json:"name"`
}
var target Target
err := JsonToStruct(jsonData, &target)
if err != nil {
t.Errorf("err %s", err)
return
}
}
// 多层级json测试
//func TestJsonToStruct4(t *testing.T) {
// type Address struct {