mirror of
https://github.com/json-iterator/go.git
synced 2025-04-20 11:28:49 +02:00
remove special handling for field
This commit is contained in:
parent
477be43d00
commit
64cc784089
@ -3,7 +3,6 @@ package jsoniter
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"unicode"
|
"unicode"
|
||||||
"unsafe"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// ReadObject read one field from object.
|
// ReadObject read one field from object.
|
||||||
@ -19,9 +18,6 @@ func (iter *Iterator) ReadObject() (ret string) {
|
|||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
if c == '"' {
|
if c == '"' {
|
||||||
iter.unreadByte()
|
iter.unreadByte()
|
||||||
if iter.cfg.objectFieldMustBeSimpleString {
|
|
||||||
return string(iter.readObjectFieldAsBytes())
|
|
||||||
} else {
|
|
||||||
field := iter.ReadString()
|
field := iter.ReadString()
|
||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
if c != ':' {
|
if c != ':' {
|
||||||
@ -29,23 +25,18 @@ func (iter *Iterator) ReadObject() (ret string) {
|
|||||||
}
|
}
|
||||||
return field
|
return field
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if c == '}' {
|
if c == '}' {
|
||||||
return "" // end of object
|
return "" // end of object
|
||||||
}
|
}
|
||||||
iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c}))
|
iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c}))
|
||||||
return
|
return
|
||||||
case ',':
|
case ',':
|
||||||
if iter.cfg.objectFieldMustBeSimpleString {
|
|
||||||
return string(iter.readObjectFieldAsBytes())
|
|
||||||
} else {
|
|
||||||
field := iter.ReadString()
|
field := iter.ReadString()
|
||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
if c != ':' {
|
if c != ':' {
|
||||||
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
||||||
}
|
}
|
||||||
return field
|
return field
|
||||||
}
|
|
||||||
case '}':
|
case '}':
|
||||||
return "" // end of object
|
return "" // end of object
|
||||||
default:
|
default:
|
||||||
@ -115,37 +106,26 @@ func calcHash(str string) int32 {
|
|||||||
// ReadObjectCB read object with callback, the key is ascii only and field name not copied
|
// ReadObjectCB read object with callback, the key is ascii only and field name not copied
|
||||||
func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
|
func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
|
||||||
c := iter.nextToken()
|
c := iter.nextToken()
|
||||||
var fieldBytes []byte
|
|
||||||
var field string
|
var field string
|
||||||
if c == '{' {
|
if c == '{' {
|
||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
if c == '"' {
|
if c == '"' {
|
||||||
iter.unreadByte()
|
iter.unreadByte()
|
||||||
if iter.cfg.objectFieldMustBeSimpleString {
|
|
||||||
fieldBytes = iter.readObjectFieldAsBytes()
|
|
||||||
field = *(*string)(unsafe.Pointer(&fieldBytes))
|
|
||||||
} else {
|
|
||||||
field = iter.ReadString()
|
field = iter.ReadString()
|
||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
if c != ':' {
|
if c != ':' {
|
||||||
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if !callback(iter, field) {
|
if !callback(iter, field) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
for c == ',' {
|
for c == ',' {
|
||||||
if iter.cfg.objectFieldMustBeSimpleString {
|
|
||||||
fieldBytes = iter.readObjectFieldAsBytes()
|
|
||||||
field = *(*string)(unsafe.Pointer(&fieldBytes))
|
|
||||||
} else {
|
|
||||||
field = iter.ReadString()
|
field = iter.ReadString()
|
||||||
c = iter.nextToken()
|
c = iter.nextToken()
|
||||||
if c != ':' {
|
if c != ':' {
|
||||||
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if !callback(iter, field) {
|
if !callback(iter, field) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -487,16 +487,11 @@ func (decoder *generalStructDecoder) Decode(ptr unsafe.Pointer, iter *Iterator)
|
|||||||
fieldDecoder.Decode(ptr, iter)
|
fieldDecoder.Decode(ptr, iter)
|
||||||
}
|
}
|
||||||
for iter.nextToken() == ',' {
|
for iter.nextToken() == ',' {
|
||||||
if iter.cfg.objectFieldMustBeSimpleString {
|
|
||||||
fieldBytes := iter.readObjectFieldAsBytes()
|
|
||||||
field = *(*string)(unsafe.Pointer(&fieldBytes))
|
|
||||||
} else {
|
|
||||||
field = iter.ReadString()
|
field = iter.ReadString()
|
||||||
c := iter.nextToken()
|
c := iter.nextToken()
|
||||||
if c != ':' {
|
if c != ':' {
|
||||||
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
fieldDecoder = decoder.fields[strings.ToLower(field)]
|
fieldDecoder = decoder.fields[strings.ToLower(field)]
|
||||||
if fieldDecoder == nil {
|
if fieldDecoder == nil {
|
||||||
if decoder.disallowUnknownFields {
|
if decoder.disallowUnknownFields {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package test
|
package test
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
// TODO: fix this
|
|
||||||
//testCases = append(testCases,
|
//testCases = append(testCases,
|
||||||
// (*struct {
|
// (*struct {
|
||||||
// Upper bool `json:"M"`
|
// Upper bool `json:"M"`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user