github.com/gogf/gf@v1.16.9/encoding/gjson/gjson_z_unit_set_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gjson_test 8 9 import ( 10 "bytes" 11 "github.com/gogf/gf/frame/g" 12 "github.com/gogf/gf/test/gtest" 13 "github.com/gogf/gf/text/gstr" 14 "testing" 15 16 "github.com/gogf/gf/encoding/gjson" 17 ) 18 19 func Test_Set1(t *testing.T) { 20 e := []byte(`{"k1":{"k11":[1,2,3]},"k2":"v2"}`) 21 p := gjson.New(map[string]string{ 22 "k1": "v1", 23 "k2": "v2", 24 }) 25 p.Set("k1.k11", []int{1, 2, 3}) 26 if c, err := p.ToJson(); err == nil { 27 28 if bytes.Compare(c, []byte(`{"k1":{"k11":[1,2,3]},"k2":"v2"}`)) != 0 { 29 t.Error("expect:", string(e)) 30 } 31 } else { 32 t.Error(err) 33 } 34 } 35 36 func Test_Set2(t *testing.T) { 37 gtest.C(t, func(t *gtest.T) { 38 e := `[[null,1]]` 39 p := gjson.New([]string{"a"}) 40 p.Set("0.1", 1) 41 s := p.MustToJsonString() 42 t.Assert(s, e) 43 }) 44 } 45 46 func Test_Set3(t *testing.T) { 47 e := []byte(`{"kv":{"k1":"v1"}}`) 48 p := gjson.New([]string{"a"}) 49 p.Set("kv", map[string]string{ 50 "k1": "v1", 51 }) 52 if c, err := p.ToJson(); err == nil { 53 if bytes.Compare(c, e) != 0 { 54 t.Error("expect:", string(e)) 55 } 56 } else { 57 t.Error(err) 58 } 59 } 60 61 func Test_Set4(t *testing.T) { 62 e := []byte(`["a",[{"k1":"v1"}]]`) 63 p := gjson.New([]string{"a"}) 64 p.Set("1.0", map[string]string{ 65 "k1": "v1", 66 }) 67 if c, err := p.ToJson(); err == nil { 68 69 if bytes.Compare(c, e) != 0 { 70 t.Error("expect:", string(e)) 71 } 72 } else { 73 t.Error(err) 74 } 75 } 76 77 func Test_Set5(t *testing.T) { 78 e := []byte(`[[[[[[[[[[[[[[[[[[[[[1,2,3]]]]]]]]]]]]]]]]]]]]]`) 79 p := gjson.New([]string{"a"}) 80 p.Set("0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0", []int{1, 2, 3}) 81 if c, err := p.ToJson(); err == nil { 82 83 if bytes.Compare(c, e) != 0 { 84 t.Error("expect:", string(e)) 85 } 86 } else { 87 t.Error(err) 88 } 89 } 90 91 func Test_Set6(t *testing.T) { 92 e := []byte(`["a",[1,2,3]]`) 93 p := gjson.New([]string{"a"}) 94 p.Set("1", []int{1, 2, 3}) 95 if c, err := p.ToJson(); err == nil { 96 97 if bytes.Compare(c, e) != 0 { 98 t.Error("expect:", string(e)) 99 } 100 } else { 101 t.Error(err) 102 } 103 } 104 105 func Test_Set7(t *testing.T) { 106 e := []byte(`{"0":[null,[1,2,3]],"k1":"v1","k2":"v2"}`) 107 p := gjson.New(map[string]string{ 108 "k1": "v1", 109 "k2": "v2", 110 }) 111 p.Set("0.1", []int{1, 2, 3}) 112 if c, err := p.ToJson(); err == nil { 113 114 if bytes.Compare(c, e) != 0 { 115 t.Error("expect:", string(e)) 116 } 117 } else { 118 t.Error(err) 119 } 120 } 121 122 func Test_Set8(t *testing.T) { 123 e := []byte(`{"0":[[[[[[null,[1,2,3]]]]]]],"k1":"v1","k2":"v2"}`) 124 p := gjson.New(map[string]string{ 125 "k1": "v1", 126 "k2": "v2", 127 }) 128 p.Set("0.0.0.0.0.0.1", []int{1, 2, 3}) 129 if c, err := p.ToJson(); err == nil { 130 131 if bytes.Compare(c, e) != 0 { 132 t.Error("expect:", string(e)) 133 } 134 } else { 135 t.Error(err) 136 } 137 } 138 139 func Test_Set9(t *testing.T) { 140 e := []byte(`{"k1":[null,[1,2,3]],"k2":"v2"}`) 141 p := gjson.New(map[string]string{ 142 "k1": "v1", 143 "k2": "v2", 144 }) 145 p.Set("k1.1", []int{1, 2, 3}) 146 if c, err := p.ToJson(); err == nil { 147 148 if bytes.Compare(c, e) != 0 { 149 t.Error("expect:", string(e)) 150 } 151 } else { 152 t.Error(err) 153 } 154 } 155 156 func Test_Set10(t *testing.T) { 157 e := []byte(`{"a":{"b":{"c":1}}}`) 158 p := gjson.New(nil) 159 p.Set("a.b.c", 1) 160 if c, err := p.ToJson(); err == nil { 161 162 if bytes.Compare(c, e) != 0 { 163 t.Error("expect:", string(e)) 164 } 165 } else { 166 t.Error(err) 167 } 168 } 169 170 func Test_Set11(t *testing.T) { 171 e := []byte(`{"a":{"b":{}}}`) 172 p, _ := gjson.LoadContent([]byte(`{"a":{"b":{"c":1}}}`)) 173 p.Remove("a.b.c") 174 if c, err := p.ToJson(); err == nil { 175 176 if bytes.Compare(c, e) != 0 { 177 t.Error("expect:", string(e)) 178 } 179 } else { 180 t.Error(err) 181 } 182 } 183 184 func Test_Set12(t *testing.T) { 185 e := []byte(`[0,1]`) 186 p := gjson.New(nil) 187 p.Set("0", 0) 188 p.Set("1", 1) 189 if c, err := p.ToJson(); err == nil { 190 191 if bytes.Compare(c, e) != 0 { 192 t.Error("expect:", string(e)) 193 } 194 } else { 195 t.Error(err) 196 } 197 } 198 199 func Test_Set13(t *testing.T) { 200 e := []byte(`{"array":[0,1]}`) 201 p := gjson.New(nil) 202 p.Set("array.0", 0) 203 p.Set("array.1", 1) 204 if c, err := p.ToJson(); err == nil { 205 206 if bytes.Compare(c, e) != 0 { 207 t.Error("expect:", string(e)) 208 } 209 } else { 210 t.Error(err) 211 } 212 } 213 214 func Test_Set14(t *testing.T) { 215 e := []byte(`{"f":{"a":1}}`) 216 p := gjson.New(nil) 217 p.Set("f", "m") 218 p.Set("f.a", 1) 219 if c, err := p.ToJson(); err == nil { 220 221 if bytes.Compare(c, e) != 0 { 222 t.Error("expect:", string(e)) 223 } 224 } else { 225 t.Error(err) 226 } 227 } 228 229 func Test_Set15(t *testing.T) { 230 gtest.C(t, func(t *gtest.T) { 231 j := gjson.New(nil) 232 233 t.Assert(j.Set("root.0.k1", "v1"), nil) 234 t.Assert(j.Set("root.1.k2", "v2"), nil) 235 t.Assert(j.Set("k", "v"), nil) 236 237 s, err := j.ToJsonString() 238 t.Assert(err, nil) 239 t.Assert( 240 gstr.Contains(s, `"root":[{"k1":"v1"},{"k2":"v2"}`) || 241 gstr.Contains(s, `"root":[{"k2":"v2"},{"k1":"v1"}`), 242 true, 243 ) 244 t.Assert( 245 gstr.Contains(s, `{"k":"v"`) || 246 gstr.Contains(s, `"k":"v"}`), 247 true, 248 ) 249 }) 250 } 251 252 func Test_Set16(t *testing.T) { 253 gtest.C(t, func(t *gtest.T) { 254 j := gjson.New(nil) 255 256 t.Assert(j.Set("processors.0.set.0value", "1"), nil) 257 t.Assert(j.Set("processors.0.set.0field", "2"), nil) 258 t.Assert(j.Set("description", "3"), nil) 259 260 s, err := j.ToJsonString() 261 t.Assert(err, nil) 262 t.Assert( 263 gstr.Contains(s, `"processors":[{"set":{"0field":"2","0value":"1"}}]`) || 264 gstr.Contains(s, `"processors":[{"set":{"0value":"1","0field":"2"}}]`), 265 true, 266 ) 267 t.Assert( 268 gstr.Contains(s, `{"description":"3"`) || gstr.Contains(s, `"description":"3"}`), 269 true, 270 ) 271 }) 272 } 273 274 func Test_Set17(t *testing.T) { 275 gtest.C(t, func(t *gtest.T) { 276 j := gjson.New(nil) 277 278 t.Assert(j.Set("0.k1", "v1"), nil) 279 t.Assert(j.Set("1.k2", "v2"), nil) 280 // overwrite the previous slice. 281 t.Assert(j.Set("k", "v"), nil) 282 283 s, err := j.ToJsonString() 284 t.Assert(err, nil) 285 t.Assert(s, `{"k":"v"}`) 286 }) 287 } 288 289 func Test_Set18(t *testing.T) { 290 gtest.C(t, func(t *gtest.T) { 291 j := gjson.New(nil) 292 293 t.Assert(j.Set("0.1.k1", "v1"), nil) 294 t.Assert(j.Set("0.2.k2", "v2"), nil) 295 s, err := j.ToJsonString() 296 t.Assert(err, nil) 297 t.Assert(s, `[[null,{"k1":"v1"},{"k2":"v2"}]]`) 298 }) 299 } 300 301 func Test_Set19(t *testing.T) { 302 gtest.C(t, func(t *gtest.T) { 303 j := gjson.New(nil) 304 305 t.Assert(j.Set("0.1.1.k1", "v1"), nil) 306 t.Assert(j.Set("0.2.1.k2", "v2"), nil) 307 s, err := j.ToJsonString() 308 t.Assert(err, nil) 309 t.Assert(s, `[[null,[null,{"k1":"v1"}],[null,{"k2":"v2"}]]]`) 310 }) 311 } 312 313 func Test_Set20(t *testing.T) { 314 gtest.C(t, func(t *gtest.T) { 315 j := gjson.New(nil) 316 317 t.Assert(j.Set("k1", "v1"), nil) 318 t.Assert(j.Set("k2", g.Slice{1, 2, 3}), nil) 319 t.Assert(j.Set("k2.1", 20), nil) 320 t.Assert(j.Set("k2.2", g.Map{"k3": "v3"}), nil) 321 s, err := j.ToJsonString() 322 t.Assert(err, nil) 323 t.Assert(gstr.InArray( 324 g.SliceStr{ 325 `{"k1":"v1","k2":[1,20,{"k3":"v3"}]}`, 326 `{"k2":[1,20,{"k3":"v3"}],"k1":"v1"}`, 327 }, 328 s, 329 ), true) 330 }) 331 }