This commit is contained in:
aozhiwei 2020-06-17 13:21:19 +08:00
parent 6d4d04235b
commit a24a743b05

View File

@ -219,48 +219,52 @@ namespace f8
if (field_desc->is_repeated()) {
a8::MutableXObject* array_obj = a8::MutableXObject::NewArray();
std::shared_ptr<a8::XObject> 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));