定制Json Marshaling

I have a third-party json api to work with in go.
It has some endpoints which return data as key-value.
For example here is json for statuses:

{
  "result": {
    "0": "done",
    "1": "incomplete",
    "2": "completed",
    ....
  }
}

So as you see it is not an array it is an object.
Is it possible to marshal this kind of json to array of objects like

type Status struct {
    Id int
    Status string
}

without using additional struct like

type StatusReposne struct {
    Result map[string]string `json:"result"`
}

and code to extract values?

As @mkopriva stated in the comment, it's not possible with some extra work. This code does provide means to Marshal/Unmarshal data to/from a slice of Statuss:

func main() {
    sr := new(StatusReposne)

    json.Unmarshal([]byte(input), sr)
    fmt.Printf("%+v
", sr)

    js, _ := json.Marshal(sr)
    fmt.Printf("%s
", js)
}

type StatusReposne struct {
    Result []Status `json:"result"`
}

type Status struct {
    Id     int
    Status string
}

func (x *StatusReposne) MarshalJSON() ([]byte, error) {
    var buffer struct {
        Result map[string]string `json:"result"`
    }
    buffer.Result = make(map[string]string)
    for _, v := range x.Result {
        buffer.Result[strconv.Itoa(v.Id)] = v.Status
    }
    return json.Marshal(&buffer)
}

func (x *StatusReposne) UnmarshalJSON(b []byte) error {
    var buffer struct {
        Result map[string]string `json:"result"`
    }
    buffer.Result = make(map[string]string)
    json.Unmarshal(b, &buffer)
    for k, v := range buffer.Result {
        k, _ := strconv.Atoi(k)
        x.Result = append(x.Result, Status{Id: k, Status: v})
    }
    return nil
}

var input = `{
  "result": {
    "0": "done",
    "1": "incomplete",
    "2": "completed"
  }
}`