OpenAPITools / OpenAPITools/openapi-generator

[REQ][GO] Correct fields ordering

Open
#14,207 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Enhancement: Feature
Dominant language
Java
Stars
26.8k
Forks
7.7k
PR merge metrics
PR metrics pending

Description

Is your feature request related to a problem? Please describe.

Currently fields are ordered alphabetically in the marshalled JSON. This comes from the fact, that not the struct itself, but a map[string]interface is used in the UnmarshalJSON method.

Describe the solution you'd like

Provide a way to not generate a custom MarshalJSON method, so that the default one is used.

Example

Wrong ordering:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	toSerialize := map[string]interface{}{
		"foo": "bar",
		"a":   1,
	}

	j, _ := json.Marshal(toSerialize)

	fmt.Println(string(j))
}

Output: {"a":1,"foo":"bar"}

Correct ordering:

package main

import (
	"encoding/json"
	"fmt"
)

type X struct {
	Foo   string  `json:"foo"`
	A     int     `json"a"`
}

func main() {
	toSerialize := X{Foo: "bar", A: 1}

	j, _ := json.Marshal(toSerialize)

	fmt.Println(string(j))
}

Output: {"foo":"bar","a":1}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the generated Go model code that defines UnmarshalJSON and any custom MarshalJSON, then compare it with the encoding/json examples in the issue. Done means a supported option can use default struct marshaling rather than the map-based custom path, with generated output retaining declaration order.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.