mirror of
https://github.com/jefferyjob/go-easy-utils.git
synced 2025-10-18 21:04:30 +08:00
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:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user