diff --git a/protobuf-test/src/common/v2/test_fmt_json.rs b/protobuf-test/src/common/v2/test_fmt_json.rs index d492c0c90..5ac861fd1 100644 --- a/protobuf-test/src/common/v2/test_fmt_json.rs +++ b/protobuf-test/src/common/v2/test_fmt_json.rs @@ -301,6 +301,29 @@ fn test_always_output_default_values() { assert_eq!("{\"iii\": 0, \"sss\": \"asd\"}", json); } +#[test] +fn test_always_output_default_values_for_repeated_fields() { + let m = TestIncludeDefaultValuesWithRepeatedField::new(); + let json = json::print_to_string_with_options( + &m, + &json::PrintOptions { + always_output_default_values: false, + ..Default::default() + }, + ) + .unwrap(); + assert_eq!("{}", json); + let json = json::print_to_string_with_options( + &m, + &json::PrintOptions { + always_output_default_values: true, + ..Default::default() + }, + ) + .unwrap(); + assert_eq!("{\"rrr\": []}", json); +} + #[test] fn test_ignore_unknown_fields() { let mut expected = TestTypes::new(); diff --git a/protobuf-test/src/common/v2/test_fmt_json_pb.proto b/protobuf-test/src/common/v2/test_fmt_json_pb.proto index 2690d44ca..2ec5db519 100644 --- a/protobuf-test/src/common/v2/test_fmt_json_pb.proto +++ b/protobuf-test/src/common/v2/test_fmt_json_pb.proto @@ -85,6 +85,10 @@ message TestIncludeDefaultValues { } } +message TestIncludeDefaultValuesWithRepeatedField { + repeated int32 rrr = 1; +} + message TestJsonName { optional bool field_with_json_name = 1 [json_name = "Field With json_name"]; } diff --git a/protobuf/src/json/print.rs b/protobuf/src/json/print.rs index 41ca57199..d7af1f1c6 100644 --- a/protobuf/src/json/print.rs +++ b/protobuf/src/json/print.rs @@ -499,14 +499,14 @@ impl Printer { self.print_printable(&v)?; } ReflectFieldRef::Repeated(v) => { - if !v.is_empty() { + if !v.is_empty() || self.print_options.always_output_default_values { self.print_comma_but_first(&mut first)?; write!(self.buf, "\"{}\": ", json_field_name)?; self.print_repeated(&v)?; } } ReflectFieldRef::Map(v) => { - if !v.is_empty() { + if !v.is_empty() || self.print_options.always_output_default_values { self.print_comma_but_first(&mut first)?; write!(self.buf, "\"{}\": ", json_field_name)?; self.print_map(&v)?;