Re: [go-nuts] Arrays, structs and marshalJSON

2017-08-09 Thread Sankar P
aah. Damn it :-) Thanks a lot. I am hitting myself for missing this.

2017-08-09 16:40 GMT+05:30 Jakob Borg :

> On 9 Aug 2017, at 12:26, Sankar  wrote:
> >
> > Now for the same, Item object, the json.Marshal function returns two
> different strings for the `Item` object.
> >
> > If you run the playground url, you will find that:
> >
> > {"Items":[{"SD":"2009-11-10T23:00"}]}
> > {"Item":{"SD":"2009-11-10T23:00:00Z"}}
> >
> > are two different outputs (notice the "seconds" and the "Z" in the
> second line). I expected both the lines to print the same output for "SD"
> as the same object is re-used for them both.
> >
> > Now, should I define MarshalJson and UnmarshalJSON function for the
> []Item too (after making it a custom struct) ?
> >
> > Or is this a bug, or do I misunderstand anything ?
>
> The issue is that you have defined MarshalJSON as a method with a pointer
> receiver, while the JSON marshaller will access it through an interface
> value that is not addressable. Instead, declare the MarshalJSON method with
> a value receiver:
>
> func (ct CustomTime) MarshalJSON() ([]byte, error) { ... }
>
> //jb
>
>


-- 
Sankar P
http://psankar.blogspot.com

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


Re: [go-nuts] Arrays, structs and marshalJSON

2017-08-09 Thread Jakob Borg
On 9 Aug 2017, at 12:26, Sankar  wrote:
> 
> Now for the same, Item object, the json.Marshal function returns two 
> different strings for the `Item` object.
> 
> If you run the playground url, you will find that:
> 
> {"Items":[{"SD":"2009-11-10T23:00"}]} 
> {"Item":{"SD":"2009-11-10T23:00:00Z"}}
> 
> are two different outputs (notice the "seconds" and the "Z" in the second 
> line). I expected both the lines to print the same output for "SD" as the 
> same object is re-used for them both.
> 
> Now, should I define MarshalJson and UnmarshalJSON function for the []Item 
> too (after making it a custom struct) ?
> 
> Or is this a bug, or do I misunderstand anything ?

The issue is that you have defined MarshalJSON as a method with a pointer 
receiver, while the JSON marshaller will access it through an interface value 
that is not addressable. Instead, declare the MarshalJSON method with a value 
receiver:

func (ct CustomTime) MarshalJSON() ([]byte, error) { ... }

//jb

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