42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package f5
|
|
|
|
import (
|
|
"os"
|
|
"bufio"
|
|
"reflect"
|
|
"fmt"
|
|
|
|
"github.com/golang/protobuf/proto"
|
|
"github.com/golang/protobuf/jsonpb"
|
|
"google.golang.org/protobuf/reflect/protoregistry"
|
|
)
|
|
|
|
func ReadJsonMetaFile(fileName string, list interface{}) {
|
|
msgType := reflect.TypeOf(list).Elem().Elem().Elem()
|
|
msg := reflect.New(msgType)
|
|
msgPb := msg.Interface().(proto.Message)
|
|
msgReflect := proto.MessageReflect(msgPb)
|
|
msgDesc := msgReflect.Descriptor()
|
|
|
|
meta, _ := protoregistry.GlobalTypes.FindMessageByName(msgDesc.FullName() + "Metas")
|
|
metaList := meta.New()
|
|
f, _ := os.Open(fileName)
|
|
data, _ := bufio.NewReader(f).ReadString(0)
|
|
data = "{\"values\":" + data
|
|
data += "}"
|
|
err := jsonpb.UnmarshalString(data, proto.MessageV1(metaList))
|
|
if err == nil {
|
|
fmt.Println("json decode ok", data)
|
|
}
|
|
fmt.Println(err)
|
|
|
|
/* msgReflect = proto.MessageReflect(proto.MessageV1(metaList))
|
|
msgDesc = msgReflect.Descriptor()
|
|
valuesField := msgDesc.Fields().ByName("values")
|
|
values := msgReflect.Get(valuesField)
|
|
reflect.ValueOf(list).Elem().Set(reflect.ValueOf(values.List()))
|
|
_ = valuesField
|
|
fmt.Println(valuesField, values)*/
|
|
}
|
|
|