| 341 | } |
| 342 | |
| 343 | func (t Result) arrayOrMap(vc byte, valueize bool) (r arrayOrMapResult) { |
| 344 | var json = t.Raw |
| 345 | var i int |
| 346 | var value Result |
| 347 | var count int |
| 348 | var key Result |
| 349 | if vc == 0 { |
| 350 | for ; i < len(json); i++ { |
| 351 | if json[i] == '{' || json[i] == '[' { |
| 352 | r.vc = json[i] |
| 353 | i++ |
| 354 | break |
| 355 | } |
| 356 | if json[i] > ' ' { |
| 357 | goto end |
| 358 | } |
| 359 | } |
| 360 | } else { |
| 361 | for ; i < len(json); i++ { |
| 362 | if json[i] == vc { |
| 363 | i++ |
| 364 | break |
| 365 | } |
| 366 | if json[i] > ' ' { |
| 367 | goto end |
| 368 | } |
| 369 | } |
| 370 | r.vc = vc |
| 371 | } |
| 372 | if r.vc == '{' { |
| 373 | if valueize { |
| 374 | r.oi = make(map[string]interface{}) |
| 375 | } else { |
| 376 | r.o = make(map[string]Result) |
| 377 | } |
| 378 | } else { |
| 379 | if valueize { |
| 380 | r.ai = make([]interface{}, 0) |
| 381 | } else { |
| 382 | r.a = make([]Result, 0) |
| 383 | } |
| 384 | } |
| 385 | for ; i < len(json); i++ { |
| 386 | if json[i] <= ' ' { |
| 387 | continue |
| 388 | } |
| 389 | // get next value |
| 390 | if json[i] == ']' || json[i] == '}' { |
| 391 | break |
| 392 | } |
| 393 | switch json[i] { |
| 394 | default: |
| 395 | if (json[i] >= '0' && json[i] <= '9') || json[i] == '-' { |
| 396 | value.Type = Number |
| 397 | value.Raw, value.Num = tonum(json[i:]) |
| 398 | value.Str = "" |
| 399 | } else { |
| 400 | continue |