Skip to content

Commit

Permalink
fix: fixed a problem that MarshalIndent does not work when UnorderedM…
Browse files Browse the repository at this point in the history
…ap is specified (#435)
  • Loading branch information
orisano authored Mar 13, 2023
1 parent 2ef15e7 commit f32a307
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 6 deletions.
16 changes: 16 additions & 0 deletions encode_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2630,6 +2630,22 @@ func TestCustomMarshalForMapKey(t *testing.T) {
assertEq(t, "custom map key", string(expected), string(got))
}

func TestIssue417(t *testing.T) {
x := map[string]string{
"b": "b",
"a": "a",
}
b, err := json.MarshalIndentWithOption(x, "", " ", json.UnorderedMap())
assertErr(t, err)

var y map[string]string
err = json.Unmarshal(b, &y)
assertErr(t, err)

assertEq(t, "key b", "b", y["b"])
assertEq(t, "key a", "a", y["a"])
}

func TestIssue426(t *testing.T) {
type I interface {
Foo()
Expand Down
7 changes: 4 additions & 3 deletions internal/encoder/vm_color_indent/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ func appendNullComma(ctx *encoder.RuntimeContext, b []byte) []byte {
}

func appendColon(_ *encoder.RuntimeContext, b []byte) []byte {
return append(b, ':', ' ')
return append(b[:len(b)-2], ':', ' ')
}

func appendMapKeyValue(ctx *encoder.RuntimeContext, code *encoder.Opcode, b, key, value []byte) []byte {
Expand Down Expand Up @@ -229,8 +229,9 @@ func appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {

func appendObjectEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {
last := len(b) - 1
b[last] = '\n'
b = appendIndent(ctx, b, code.Indent-1)
// replace comma to newline
b[last-1] = '\n'
b = appendIndent(ctx, b[:last], code.Indent)
return append(b, '}', ',', '\n')
}

Expand Down
7 changes: 4 additions & 3 deletions internal/encoder/vm_indent/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ func appendNullComma(_ *encoder.RuntimeContext, b []byte) []byte {
}

func appendColon(_ *encoder.RuntimeContext, b []byte) []byte {
return append(b, ':', ' ')
return append(b[:len(b)-2], ':', ' ')
}

func appendMapKeyValue(ctx *encoder.RuntimeContext, code *encoder.Opcode, b, key, value []byte) []byte {
Expand Down Expand Up @@ -173,8 +173,9 @@ func appendEmptyObject(_ *encoder.RuntimeContext, b []byte) []byte {

func appendObjectEnd(ctx *encoder.RuntimeContext, code *encoder.Opcode, b []byte) []byte {
last := len(b) - 1
b[last] = '\n'
b = appendIndent(ctx, b, code.Indent-1)
// replace comma to newline
b[last-1] = '\n'
b = appendIndent(ctx, b[:last], code.Indent)
return append(b, '}', ',', '\n')
}

Expand Down

0 comments on commit f32a307

Please sign in to comment.