From a24a743b051656e599f0939a49fed3847ed17206 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 17 Jun 2020 13:21:19 +0800 Subject: [PATCH] 1 --- cpp/utils.cc | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/cpp/utils.cc b/cpp/utils.cc index b2b7201..fa4e418 100644 --- a/cpp/utils.cc +++ b/cpp/utils.cc @@ -219,48 +219,52 @@ namespace f8 if (field_desc->is_repeated()) { a8::MutableXObject* array_obj = a8::MutableXObject::NewArray(); std::shared_ptr repeated_field = jsonobj.At(field_name); - for (int i = 0; i < repeated_field->Size(); ++i) { - auto field_value = repeated_field->At(i); + for (int i = 0; i < reflection->FieldSize(*msg, field_desc); ++i) { switch (field_desc->cpp_type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: + { + array_obj->Push(reflection->GetRepeatedBool(*msg, field_desc, i)); + } + break; case google::protobuf::FieldDescriptor::CPPTYPE_STRING: { - array_obj->Push(reflection->GetString(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedString(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_INT32: { - array_obj->Push(reflection->GetInt32(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedInt32(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: { - array_obj->Push(reflection->GetUInt32(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedUInt32(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_INT64: { - array_obj->Push(reflection->GetInt64(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedInt64(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: { - array_obj->Push(reflection->GetUInt64(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedUInt64(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: { - array_obj->Push(reflection->GetFloat(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedFloat(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: { - array_obj->Push(reflection->GetDouble(*msg, field_desc)); + array_obj->Push(reflection->GetRepeatedDouble(*msg, field_desc, i)); } break; case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: { a8::MutableXObject* p = a8::MutableXObject::NewObject(); - MessageToJson(&reflection->GetMessage(*msg, field_desc), + MessageToJson(&reflection->GetRepeatedMessage(*msg, field_desc, i), *p ); array_obj->Push(*p); @@ -278,6 +282,11 @@ namespace f8 delete array_obj; } else { switch (field_desc->cpp_type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: + { + jsonobj.SetVal(field_name, reflection->GetBool(*msg, field_desc)); + } + break; case google::protobuf::FieldDescriptor::CPPTYPE_STRING: { jsonobj.SetVal(field_name, reflection->GetString(*msg, field_desc));