| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package jsoniter
- import "unsafe"
- // ReadObject is a implemented iterator for json
- func (iter *Iterator) ReadObject() (ret string) {
- c := iter.nextToken()
- if iter.Error != nil {
- return
- }
- switch c {
- case 'n':
- iter.skipUntilBreak()
- if iter.Error != nil {
- return
- }
- return "" // null
- case '{':
- c = iter.nextToken()
- if iter.Error != nil {
- return
- }
- switch c {
- case '}':
- return "" // end of object
- case '"':
- iter.unreadByte()
- return iter.readObjectField()
- default:
- iter.reportError("ReadObject", `expect " after {`)
- return
- }
- case ',':
- return iter.readObjectField()
- case '}':
- return "" // end of object
- default:
- iter.reportError("ReadObject", `expect { or , or } or n`)
- return
- }
- }
- func (iter *Iterator) readObjectStart() bool {
- c := iter.nextToken()
- if c == '{' {
- c = iter.nextToken()
- if c == '}' {
- return false
- }
- iter.unreadByte()
- return true
- }
- iter.reportError("readObjectStart", "expect { ")
- return false
- }
- func (iter *Iterator) readObjectField() (ret string) {
- str := iter.readStringAsBytes()
- if iter.skipWhitespacesWithoutLoadMore() {
- if ret == "" {
- ret = string(str)
- }
- if !iter.loadMore() {
- return
- }
- }
- if iter.buf[iter.head] != ':' {
- iter.reportError("ReadObject", "expect : after object field")
- return
- }
- iter.head++
- if iter.skipWhitespacesWithoutLoadMore() {
- if ret == "" {
- ret = string(str)
- }
- if !iter.loadMore() {
- return
- }
- }
- if ret == "" {
- return *(*string)(unsafe.Pointer(&str))
- }
- return ret
- }
|