Skip to content

Commit b5b69fe

Browse files
rvibracRomain Vibrac
andauthored
Add merge functionnality (#8)
* Add merge functionnality * Add test Co-authored-by: Romain Vibrac <romain.vibrac@datasweet.fr>
1 parent 87445be commit b5b69fe

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

json.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,3 +444,16 @@ func (j *Json) Clone() *Json {
444444
}
445445
return FromBytes(bytes)
446446
}
447+
448+
// Merge to merge multiples JSON into a single one
449+
func Merge(jsons ...*Json) *Json {
450+
res := New()
451+
m := make(map[string]interface{})
452+
for _, j := range jsons {
453+
for _, k := range j.Keys() {
454+
m[k] = j.AsObject()[k]
455+
}
456+
}
457+
res.data = m
458+
return res
459+
}

json_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,21 @@ func TestClone(t *testing.T) {
288288
assert.Equal(t, int64(12345), clone.Get("test").AsInt())
289289
assert.Equal(t, int64(0), j.Get("test").AsInt())
290290
}
291+
292+
func TestMerge(t *testing.T) {
293+
j := jsonmap.FromString(jsonTest)
294+
j2 := jsonmap.FromString(`{
295+
"new": "value",
296+
"name": "john"
297+
}`)
298+
299+
merge := jsonmap.Merge(j, j2)
300+
assert.NotNil(t, merge)
301+
assert.Equal(t, "hello", merge.Get("string").AsString())
302+
assert.Equal(t, true, merge.Get("bool").AsBool())
303+
assert.Equal(t, float64(123), merge.Get("number").AsFloat())
304+
assert.Equal(t, int64(4), merge.Get("object.sub[0].a").AsInt())
305+
assert.Equal(t, "value", merge.Get("new").AsString())
306+
assert.Equal(t, "john", merge.Get("name").AsString())
307+
assert.Len(t, merge.Keys(), 7)
308+
}

0 commit comments

Comments
 (0)