Marshaling the field is fine, so using the tag json:"-" won’t work. I could use the UnmarshalJSON method on the struct, but I have no idea how to implement it.

I’d rather not make a duplicate of the struct with that field removed, as it causes quite a bit of code duplication, and it’s pretty chaotic.

  • pivot_root@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    2 days ago

    One option is to use embedded structs:

    type UnmarshalStruct struct {
        Foo string
    }
    
    type MarshalStruct struct {
        UnmarshalStruct
        FieldYouDontWantUnmarshaled string
    }
    

    When marshaling, you would marshal MarshalStruct. Because UnmarshalStruct is embedded, json.Marshal automatically includes all the fields from UnmarshalStruct.

    When unmarshaling, you would unmarshal UnmarshalStruct and then create a new MarshalStruct like this:

    var unmarshaled UnmarshalStruct
    err := json.Unmarshal(&unmarshaled)
    if err != nil {
        panic(err)
    }
    
    return MarshalStruct {
        UnmarshalStruct: unmarshaled
    }
    

    Although, if I may ask: why do you not want a field to be unmarshaled? You could always just set it back to the zero value after unmarshaling, which is a lot easier of a solution.