Thanks Adam.

Can you please let me know which API I can use to do reflection on a map?


Regards,
Qian Zhang

On Mon, Jun 5, 2017 at 11:42 PM, Adam Cozzette <acozze...@google.com> wrote:

> Doing reflection on a map is a little bit tricky, but the way to do it is
> to treat it as a repeated field since that is how it is actually
> represented on the wire. A map is a stored as a repeated message field,
> where in each message the key is field 1 and the value is field 2.
>
> On Mon, Jun 5, 2017 at 1:37 AM, Qian Zhang <zhq527...@gmail.com> wrote:
>
>> Hi Adam,
>>
>> We are using picojson <https://github.com/kazuho/picojson> to parse the
>> JSON file.
>>
>> After more debugging, I think I have found the root cause: In the code
>> here
>> <https://github.com/apache/mesos/blob/1.2.0/3rdparty/stout/include/stout/protobuf.hpp#L575>,
>> we are trying to find a field by the key of an entry in a map, obviously it
>> will fail since the key of any map entries is not in the protobuf message
>> definition (the .proto file), and to avoid finding field by a map entry's
>> key, in this method
>> <https://github.com/apache/mesos/blob/1.2.0/3rdparty/stout/include/stout/protobuf.hpp#L387:L407>,
>> we need to check if "field->is_map()" is true which is currently missed, if
>> the field is a map, then we should use the reflection to construct a map
>> message, however I do not find a method in protobuf to do that, I find a
>> lot of "Addxxx()" methods (e.g., "AddString()", "AddInt64()", etc.), but
>> not a method for adding a map. There is a method
>> "InsertOrLookupMapValue()", but that is a private method which I can not
>> call in my code.
>>
>> So can you please suggest how to add a map message? Thanks!
>>
>>
>> Regards,
>> Qian Zhang
>>
>> On Sat, Jun 3, 2017 at 1:02 AM, Adam Cozzette <acozze...@google.com>
>> wrote:
>>
>>> It looks to me like your JSON syntax is right. Could you post the C++
>>> code you are using to parse the JSON file?
>>>
>>> On Fri, Jun 2, 2017 at 1:16 AM, Qian Zhang <zhq527...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have a C++ project in which there is a .proto file, and in that file,
>>>> there is protobuf message which has a map field:
>>>> "map<string, string> annotations = 5;"
>>>>
>>>> And the JSON file to be parsed with that .proto file has the following
>>>> content:
>>>> "annotations": {
>>>>   "com.example.key1": "value1",
>>>>   "com.example.key2": "value2"
>>>> }
>>>>
>>>> The .proto file is in proto2 syntax (it has "syntax = "proto2";" at the
>>>> beginning) and I am using protobuf-3.3.0, the compilation succeed, but I
>>>> found the annotation map always has only one entry, and both the entry's
>>>> key and value are "" which is obviously not correct.
>>>>
>>>> Any suggestions?
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Protocol Buffers" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to protobuf+unsubscr...@googlegroups.com.
>>>> To post to this group, send email to protobuf@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/protobuf.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to