Skip to content

Commit 0e5a7a1

Browse files
committed
only merge the first-level fields of json, and assign values directly to deeper fields
1 parent 6a7ad8a commit 0e5a7a1

2 files changed

Lines changed: 36 additions & 2 deletions

File tree

merge.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ func merge(cur, patch *lazyNode, mergeMerge bool) *lazyNode {
2020
if err != nil {
2121
return patch
2222
}
23-
24-
mergeDocs(curDoc, patchDoc, mergeMerge)
23+
mergeDocs2(curDoc, patchDoc, mergeMerge)
2524

2625
return cur
2726
}
@@ -50,6 +49,24 @@ func mergeDocs(doc, patch *partialDoc, mergeMerge bool) {
5049
}
5150
}
5251

52+
func mergeDocs2(doc, patch *partialDoc, mergeMerge bool) {
53+
for k, v := range *patch {
54+
if v == nil {
55+
if mergeMerge {
56+
(*doc)[k] = nil
57+
} else {
58+
delete(*doc, k)
59+
}
60+
} else {
61+
if !mergeMerge {
62+
pruneNulls(v)
63+
}
64+
65+
(*doc)[k] = v
66+
}
67+
}
68+
}
69+
5370
func pruneNulls(n *lazyNode) {
5471
sub, err := n.intoDoc()
5572

print.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package jsonpatch
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"fmt"
7+
)
8+
9+
func PrintJson(data []byte) {
10+
var out bytes.Buffer
11+
err := json.Indent(&out, data, "", " ")
12+
if err != nil {
13+
fmt.Println(err)
14+
return
15+
}
16+
fmt.Println(out.String())
17+
}

0 commit comments

Comments
 (0)