valyala / fastjson

Fast JSON parser and validator for Go. No custom structs, no code generation, no reflection

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Inconsistent interface of fastjson.GetString( data, "key") and value Get("key").String()

salmonix opened this issue · comments

fastjson.GetString( data, "key") return a string leaving the escape characters at place.
However, when data is parsed and the key is accessed, the return value is always without escape characters.

fastjson.GetString( data, "key" ) -> returns string without escape characters
fastjson.Parse(data).Get("key").String() -> returns string with escape characters, but in a " " ( ??? )
fastjson.Parse(data).GetStringBytes("key") -> returns []bytes made from a string without escape characters.

package modifiers

import (
    "testing"

    "github.com/valyala/fastjson"
)


func TestEscaping(t *testing.T){

    data := []byte(`{"key":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"}`)

    direct := fastjson.GetString(data, "key")

    parsed,_ := fastjson.ParseBytes(data)
    parsedKey := parsed.Get("key").String()
    t.Log("direct GetString:  ",direct)
    t.Log("parsed Get.String: ",parsedKey)

    parsedKeyBytes := parsed.GetStringBytes("key")
    t.Log("parsed GetStringBytes : ",string(parsedKeyBytes))

    parsed,_ = fastjson.Parse(string(data))
    parsedKey = parsed.Get("key").String()
    t.Log("direct GetString:  ",direct)
    t.Log("parsed Get.String: ",parsedKey)

    parsedKeyBytes = parsed.GetStringBytes("key")
    t.Log("parsed GetStringBytes : ",string(parsedKeyBytes))
}

 fastj_test.go:18: direct GetString:                 <?xml version="1.0" encoding="UTF-8"?>
 fastj_test.go:19: parsed Get.String:            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
 fastj_test.go:22: parsed GetStringBytes :   <?xml version="1.0" encoding="UTF-8"?>
 fastj_test.go:26: direct GetString:                <?xml version="1.0" encoding="UTF-8"?>
 fastj_test.go:27: parsed Get.String:           "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
 fastj_test.go:30: parsed GetStringBytes :   <?xml version="1.0" encoding="UTF-8"?>