Skip to content

Commit 6046d92

Browse files
diedsmilingbuger
authored andcommitted
Trailing commas should be removed when last item in the object is deleted (#131)
#131
1 parent 4be68c9 commit 6046d92

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

parser.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,18 @@ func Delete(data []byte, keys ...string) []byte {
650650
}
651651
}
652652

653-
data = append(data[:keyOffset], data[endOffset:]...)
653+
// We need to remove remaining trailing comma if we delete las element in the object
654+
prevTok := lastToken(data[:keyOffset])
655+
remainedValue := data[endOffset:]
656+
657+
var newOffset int
658+
if nextToken(remainedValue) > -1 && remainedValue[nextToken(remainedValue)] == '}' && data[prevTok] == ',' {
659+
newOffset = prevTok
660+
} else {
661+
newOffset = prevTok + 1
662+
}
663+
664+
data = append(data[:newOffset], data[endOffset:]...)
654665
return data
655666
}
656667

parser_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ var deleteTests = []DeleteTest{
167167
path: []string{"a", "[0]", "b"},
168168
data: `{"a": [{"c": {"b": 3}}], "b": 2}`,
169169
},
170+
{
171+
desc: "Remove trailing comma if last object is deleted",
172+
json: `{"a": "1", "b": "2"}`,
173+
path: []string{"b"},
174+
data: `{"a": "1"}`,
175+
},
170176
}
171177

172178
var setTests = []SetTest{

0 commit comments

Comments
 (0)