encoding/jsonpb: update handling of Empty message type

The "custom" JSON representation for Empty is {}. And hence, when
embedded in Any, it needs to be represented as a field value in the
"value" field.

Discussion at https://github.com/protocolbuffers/protobuf/issues/5390.

As of this CL, code currently handles marshaling of Empty embedded
in Any, but not unmarshaling of Any yet. I'd like to get this corrected
first in order to proceed with unmarshaling of Any.

Change-Id: Ic0c321be188a979909b99d6b467aabc57c48e95c
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/169702
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/encoding/jsonpb/encode_test.go b/encoding/jsonpb/encode_test.go
index d1c151c..e9bf571 100644
--- a/encoding/jsonpb/encode_test.go
+++ b/encoding/jsonpb/encode_test.go
@@ -1631,8 +1631,6 @@
   "value": true
 }`,
 	}, {
-		// TODO: Need clarification on the specification for this. See
-		// https://github.com/protocolbuffers/protobuf/issues/5390
 		desc: "Any with Empty",
 		mo: jsonpb.MarshalOptions{
 			Resolver: preg.NewTypes((&knownpb.Empty{}).ProtoReflect().Type()),
@@ -1649,7 +1647,8 @@
 			}
 		}(),
 		want: `{
-  "@type": "type.googleapis.com/google.protobuf.Empty"
+  "@type": "type.googleapis.com/google.protobuf.Empty",
+  "value": {}
 }`,
 	}, {
 		desc: "Any with StringValue containing invalid UTF8",
@@ -1843,7 +1842,8 @@
   "optValue": "world",
   "optEmpty": {},
   "optAny": {
-    "@type": "google.protobuf.Empty"
+    "@type": "google.protobuf.Empty",
+    "value": {}
   },
   "optFieldmask": "fooBar,barFoo"
 }`,