MCPcopy Index your code
hub / github.com/buger/jsonparser / getType

Function getType

parser.go:915–977  ·  view source on GitHub ↗

SYS-REQ-001, SYS-REQ-027

(data []byte, offset int)

Source from the content-addressed store, hash-verified

913
914// SYS-REQ-001, SYS-REQ-027
915func getType(data []byte, offset int) ([]byte, ValueType, int, error) {
916 var dataType ValueType
917 endOffset := offset
918
919 // if string value
920 if data[offset] == '"' {
921 dataType = String
922 if idx, _ := stringEnd(data[offset+1:]); idx != -1 {
923 endOffset += idx + 1
924 } else {
925 return nil, dataType, offset, MalformedStringError
926 }
927 } else if data[offset] == '[' { // if array value
928 dataType = Array
929 // break label, for stopping nested loops
930 endOffset = blockEnd(data[offset:], '[', ']')
931
932 if endOffset == -1 {
933 return nil, dataType, offset, MalformedArrayError
934 }
935
936 endOffset += offset
937 } else if data[offset] == '{' { // if object value
938 dataType = Object
939 // break label, for stopping nested loops
940 endOffset = blockEnd(data[offset:], '{', '}')
941
942 if endOffset == -1 {
943 return nil, dataType, offset, MalformedObjectError
944 }
945
946 endOffset += offset
947 } else {
948 // Number, Boolean or None
949 // tokenEnd returns len(data) when no delimiter is found, never -1,
950 // so the old end == -1 guard was dead code and has been removed.
951 end := tokenEnd(data[endOffset:])
952
953 value := data[offset : endOffset+end]
954
955 switch data[offset] {
956 case 't', 'f': // true or false
957 if bytes.Equal(value, trueLiteral) || bytes.Equal(value, falseLiteral) {
958 dataType = Boolean
959 } else {
960 return nil, Unknown, offset, UnknownValueTypeError
961 }
962 case 'u', 'n': // undefined or null
963 if bytes.Equal(value, nullLiteral) {
964 dataType = Null
965 } else {
966 return nil, Unknown, offset, UnknownValueTypeError
967 }
968 case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
969 dataType = Number
970 default:
971 return nil, Unknown, offset, UnknownValueTypeError
972 }

Callers 2

internalGetFunction · 0.85

Calls 3

stringEndFunction · 0.85
blockEndFunction · 0.85
tokenEndFunction · 0.85

Tested by 1

Used in the wild real call sites across dependent graphs

searching dependent graphs…