MCPcopy
hub / github.com/tidwall/gjson / unescape

Function unescape

gjson.go:2254–2310  ·  view source on GitHub ↗

unescape unescapes a string

(json string)

Source from the content-addressed store, hash-verified

2252
2253// unescape unescapes a string
2254func unescape(json string) string {
2255 var str = make([]byte, 0, len(json))
2256 for i := 0; i < len(json); i++ {
2257 switch {
2258 default:
2259 str = append(str, json[i])
2260 case json[i] < ' ':
2261 return string(str)
2262 case json[i] == '\\':
2263 i++
2264 if i >= len(json) {
2265 return string(str)
2266 }
2267 switch json[i] {
2268 default:
2269 return string(str)
2270 case '\\':
2271 str = append(str, '\\')
2272 case '/':
2273 str = append(str, '/')
2274 case 'b':
2275 str = append(str, '\b')
2276 case 'f':
2277 str = append(str, '\f')
2278 case 'n':
2279 str = append(str, '\n')
2280 case 'r':
2281 str = append(str, '\r')
2282 case 't':
2283 str = append(str, '\t')
2284 case '"':
2285 str = append(str, '"')
2286 case 'u':
2287 if i+5 > len(json) {
2288 return string(str)
2289 }
2290 r := runeit(json[i+1:])
2291 i += 5
2292 if utf16.IsSurrogate(r) {
2293 // need another code
2294 if len(json[i:]) >= 6 && json[i] == '\\' &&
2295 json[i+1] == 'u' {
2296 // we expect it to be correct so just consume it
2297 r = utf16.DecodeRune(r, runeit(json[i+2:]))
2298 i += 6
2299 }
2300 }
2301 // provide enough space to encode the largest utf8 possible
2302 str = append(str, 0, 0, 0, 0, 0, 0, 0, 0)
2303 n := utf8.EncodeRune(str[len(str)-8:], r)
2304 str = str[:len(str)-8+n]
2305 i-- // backtrack index by one
2306 }
2307 }
2308 }
2309 return string(str)
2310}
2311

Callers 7

TestUnescapeFunction · 0.85
ForEachMethod · 0.85
tostrFunction · 0.85
parseArrayPathFunction · 0.85
parseObjectFunction · 0.85
parseArrayFunction · 0.85
parseAnyFunction · 0.85

Calls 1

runeitFunction · 0.85

Tested by 1

TestUnescapeFunction · 0.68

Used in the wild real call sites across dependent graphs

searching dependent graphs…