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)*/ }