Index: third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc |
diff --git a/third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc b/third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc |
index b84210c10b9a43b098e6f7b32d187e4269ee47e8..6e4edd883607703d3b76a7404ca4a491d31e6ab9 100644 |
--- a/third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc |
+++ b/third_party/protobuf/src/google/protobuf/util/internal/json_objectwriter.cc |
@@ -147,7 +147,7 @@ JsonObjectWriter* JsonObjectWriter::RenderBytes(StringPiece name, |
string base64; |
if (use_websafe_base64_for_bytes_) |
- WebSafeBase64Escape(value.ToString(), &base64); |
+ WebSafeBase64EscapeWithPadding(value.ToString(), &base64); |
else |
Base64Escape(value, &base64); |
@@ -164,19 +164,32 @@ JsonObjectWriter* JsonObjectWriter::RenderNull(StringPiece name) { |
return RenderSimple(name, "null"); |
} |
+JsonObjectWriter* JsonObjectWriter::RenderNullAsEmpty(StringPiece name) { |
+ return RenderSimple(name, ""); |
+} |
+ |
void JsonObjectWriter::WritePrefix(StringPiece name) { |
bool not_first = !element()->is_first(); |
if (not_first) WriteChar(','); |
if (not_first || !element()->is_root()) NewLine(); |
- if (!name.empty()) { |
+ bool empty_key_ok = GetAndResetEmptyKeyOk(); |
+ if (!name.empty() || empty_key_ok) { |
WriteChar('"'); |
- ArrayByteSource source(name); |
- JsonEscaping::Escape(&source, &sink_); |
+ if (!name.empty()) { |
+ ArrayByteSource source(name); |
+ JsonEscaping::Escape(&source, &sink_); |
+ } |
stream_->WriteString("\":"); |
if (!indent_string_.empty()) WriteChar(' '); |
} |
} |
+bool JsonObjectWriter::GetAndResetEmptyKeyOk() { |
+ bool retval = empty_name_ok_for_next_key_; |
+ empty_name_ok_for_next_key_ = false; |
+ return retval; |
+} |
+ |
} // namespace converter |
} // namespace util |
} // namespace protobuf |