MCPcopy
hub / github.com/buger/jsonparser / Delete

Function Delete

parser.go:737–829  ·  view source on GitHub ↗

* Del - Receives existing data structure, path to delete. Returns: `data` - return modified data */ SYS-REQ-010, SYS-REQ-033, SYS-REQ-034, SYS-REQ-035, SYS-REQ-048, SYS-REQ-049, SYS-REQ-050, SYS-REQ-056

(data []byte, keys ...string)

Source from the content-addressed store, hash-verified

735*/
736// SYS-REQ-010, SYS-REQ-033, SYS-REQ-034, SYS-REQ-035, SYS-REQ-048, SYS-REQ-049, SYS-REQ-050, SYS-REQ-056
737func Delete(data []byte, keys ...string) []byte {
738 lk := len(keys)
739 if lk == 0 {
740 return data[:0]
741 }
742
743 array := false
744 if len(keys[lk-1]) > 0 && string(keys[lk-1][0]) == "[" {
745 array = true
746 }
747
748 var startOffset, keyOffset int
749 endOffset := len(data)
750 var err error
751 if !array {
752 if len(keys) > 1 {
753 _, _, startOffset, endOffset, err = internalGet(data, keys[:lk-1]...)
754 if err != nil {
755 // problem parsing the data
756 return data
757 }
758 }
759
760 keyOffset, err = findKeyStart(data[startOffset:endOffset], keys[lk-1])
761 if err == KeyPathNotFoundError {
762 // problem parsing the data
763 return data
764 }
765 keyOffset += startOffset
766 var subEndOffset int
767 _, _, _, subEndOffset, err = internalGet(data[startOffset:endOffset], keys[lk-1])
768 if err != nil {
769 return data
770 }
771 endOffset = startOffset + subEndOffset
772 tokEnd := tokenEnd(data[endOffset:])
773 tokStart := findTokenStart(data[:keyOffset], ","[0])
774
775 if endOffset+tokEnd >= len(data) {
776 // tokenEnd sentinel: no delimiter found, input is truncated
777 return data
778 }
779
780 if data[endOffset+tokEnd] == ',' {
781 endOffset += tokEnd + 1
782 } else if data[endOffset+tokEnd] == ' ' && len(data) > endOffset+tokEnd+1 && data[endOffset+tokEnd+1] == ',' {
783 endOffset += tokEnd + 2
784 } else if data[endOffset+tokEnd] == '}' && data[tokStart] == ',' {
785 keyOffset = tokStart
786 }
787 } else {
788 _, _, keyOffset, endOffset, err = internalGet(data, keys...)
789 if err != nil {
790 // problem parsing the data
791 return data
792 }
793
794 tokEnd := tokenEnd(data[endOffset:])

Callers 15

BenchmarkDeleteSmallFunction · 0.92
BenchmarkDeleteNestedFunction · 0.92
BenchmarkDeleteLargeFunction · 0.92
TestMutationNilSafetyFunction · 0.85
TestMutationUnicodeKeysFunction · 0.85
FuzzDeleteFunction · 0.85
TestDeleteFunction · 0.85

Calls 6

internalGetFunction · 0.85
findKeyStartFunction · 0.85
tokenEndFunction · 0.85
findTokenStartFunction · 0.85
lastTokenFunction · 0.85
nextTokenFunction · 0.85

Used in the wild real call sites across dependent graphs

searching dependent graphs…