File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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+ }
Original file line number Diff line number Diff 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+ }
You can’t perform that action at this time.
0 commit comments