diff --git a/python/google/protobuf/internal/python_message.py b/python/google/protobuf/internal/python_message.py index 433744b4cf4c..1f9016880944 100755 --- a/python/google/protobuf/internal/python_message.py +++ b/python/google/protobuf/internal/python_message.py @@ -568,7 +568,7 @@ def init(self, **kwargs): ) ) - if new_val: + if new_val != None: try: field_copy.MergeFrom(new_val) except TypeError: diff --git a/python/google/protobuf/internal/well_known_types_test.py b/python/google/protobuf/internal/well_known_types_test.py index 1f05245f0d26..1a6a97c1c6db 100644 --- a/python/google/protobuf/internal/well_known_types_test.py +++ b/python/google/protobuf/internal/well_known_types_test.py @@ -13,6 +13,7 @@ import datetime import unittest +from google.protobuf import json_format from google.protobuf import text_format from google.protobuf.internal import more_messages_pb2 from google.protobuf.internal import well_known_types @@ -1040,6 +1041,36 @@ def testPackDeterministic(self): b'\x0e\x1a\x05\n\x018\x10\x10\x1a\x05\n\x019\x10\x12') self.assertEqual(golden, serialized) + def testJsonStruct(self): + value = struct_pb2.Value(struct_value=struct_pb2.Struct()) + value_dict = json_format.MessageToDict( + value, + always_print_fields_with_no_presence=True, + preserving_proto_field_name=True, + use_integers_for_enums=True, + ) + self.assertDictEqual(value_dict, {}) + + s = struct_pb2.Struct( + fields={ + 'a': struct_pb2.Value(struct_value=struct_pb2.Struct()), + }, + ) + + sdict = json_format.MessageToDict( + s, + always_print_fields_with_no_presence=True, + preserving_proto_field_name=True, + use_integers_for_enums=True, + ) + + self.assertDictEqual( + sdict, + { + 'a': {}, + }, + ) + if __name__ == '__main__': unittest.main()