MCPcopy Create free account
hub / github.com/francoispqt/gojay / decodeObject

Method decodeObject

decode_object.go:20–101  ·  view source on GitHub ↗
(j UnmarshalerJSONObject)

Source from the content-addressed store, hash-verified

18 return err
19}
20func (dec *Decoder) decodeObject(j UnmarshalerJSONObject) (int, error) {
21 keys := j.NKeys()
22 for ; dec.cursor < dec.length || dec.read(); dec.cursor++ {
23 switch dec.data[dec.cursor] {
24 case ' ', '\n', '\t', '\r', ',':
25 case '{':
26 dec.cursor = dec.cursor + 1
27 // if keys is zero we will parse all keys
28 // we run two loops for micro optimization
29 if keys == 0 {
30 for dec.cursor < dec.length || dec.read() {
31 k, done, err := dec.nextKey()
32 if err != nil {
33 return 0, err
34 } else if done {
35 return dec.cursor, nil
36 }
37 err = j.UnmarshalJSONObject(dec, k)
38 if err != nil {
39 dec.err = err
40 return 0, err
41 } else if dec.called&1 == 0 {
42 err := dec.skipData()
43 if err != nil {
44 return 0, err
45 }
46 } else {
47 dec.keysDone++
48 }
49 dec.called &= 0
50 }
51 } else {
52 for (dec.cursor < dec.length || dec.read()) && dec.keysDone < keys {
53 k, done, err := dec.nextKey()
54 if err != nil {
55 return 0, err
56 } else if done {
57 return dec.cursor, nil
58 }
59 err = j.UnmarshalJSONObject(dec, k)
60 if err != nil {
61 dec.err = err
62 return 0, err
63 } else if dec.called&1 == 0 {
64 err := dec.skipData()
65 if err != nil {
66 return 0, err
67 }
68 } else {
69 dec.keysDone++
70 }
71 dec.called &= 0
72 }
73 }
74 // will get to that point when keysDone is not lower than keys anymore
75 // in that case, we make sure cursor goes to the end of object, but we skip
76 // unmarshalling
77 if dec.child&1 != 0 {

Callers 7

UnmarshalMethod · 0.95
DecodeObjectMethod · 0.95
ObjectMethod · 0.95
UnmarshalFunction · 0.95
DecodeMethod · 0.95
UnmarshalJSONObjectMethod · 0.80
UnmarshalJSONObjectFunction · 0.80

Calls 9

readMethod · 0.95
nextKeyMethod · 0.95
skipDataMethod · 0.95
skipObjectMethod · 0.95
assertNullMethod · 0.95
raiseInvalidJSONErrMethod · 0.95
NKeysMethod · 0.65
UnmarshalJSONObjectMethod · 0.65

Tested by

no test coverage detected