Hmm, that's strange. If that's not working, you can always just look at the
file in a Piper client, though.

On Tue, Jun 6, 2017 at 8:03 PM, Qian Zhang <[email protected]> wrote:

> It seems the URL http://google3/experimental/users/acozzette/
> map_reflection_test.cc?rcl=158157727 is not working, I can not access it
> :-(
>
>
> Regards,
> Qian Zhang
>
> On Wed, Jun 7, 2017 at 1:32 AM, Adam Cozzette <[email protected]>
> wrote:
>
>> Here's an example of how to do it: http://google3/experimenta
>> l/users/acozzette/map_reflection_test.cc?rcl=158157727 It's a bit clunky
>> because you just have to reflect on the map field like you would a repeated
>> field, but it works.
>>
>> On Mon, Jun 5, 2017 at 6:08 PM, Qian Zhang <[email protected]> wrote:
>>
>>> 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 <[email protected]>
>>> 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 <[email protected]> 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 <[email protected]>
>>>>> 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 <[email protected]>
>>>>>> 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 [email protected].
>>>>>>> To post to this group, send email to [email protected].
>>>>>>> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to