运行时动态结构体支持数组!!!!!!!!

This commit is contained in:
2025-03-22 23:29:59 +08:00
parent 95946c187c
commit 45b13811c4
2 changed files with 50 additions and 29 deletions

View File

@ -10,6 +10,7 @@ package dynamicstruct
import (
"encoding/json"
"fmt"
"reflect"
"testing"
)
@ -21,26 +22,28 @@ func Test_dynamicStructImpl_New(t *testing.T) {
AddField("Boolean", "", false, "", false).
AddField("Slice", "", []int{}, "", false).
AddField("Anonymous", "", "", `json:"-"`, false).*/
AddField("user.[].base.age", "", 20, `json:"age"`, false).
AddField("user.[].base.name", "", "", `json:"name"`, false).
AddField("user.[].job.address", "", "", `json:"address"`, false).
AddField("user.[].job.company.name", "", "", `json:"name"`, false).
AddField("user.base.age", "", 20, `json:"age"`, false).
AddField("user.base.name", "", "", `json:"name"`, false).
AddField("user.job.address", "", "", `json:"address"`, false).
AddField("user.job.company.name", "", "", `json:"name"`, false).
AddField("arr.[].item.name", "", "", `json:"name"`, false).
Build()
val := instance.New()
testByte, _ := json.Marshal(val)
fmt.Println(string(testByte))
data := []byte(`
{"user": [{
{
"int": 123,
"someText": "example",
"double": 123.45,
"Boolean": true,
"Slice": [1, 2, 3],
"user": {"job":{"address":"beijing","company":{"name":"unknown"}}, "base":{"age": 1800, "name":"baicha"}},
"Anonymous": "avoid to read"
}]}
"Anonymous": "avoid to read",
"arr": [{"item":{"name":"item1","test":1}},{"item":{"name":"item2", "test":2}}]
}
`)
tType := reflect.TypeOf(val)
fmt.Println(tType, tType.Kind(), tType.Elem().Kind(), tType.Elem().Kind().String())
err := json.Unmarshal(data, &val)
fmt.Println(err, val)
valByte, _ := json.Marshal(val)