Inconsistent interface of fastjson.GetString( data, "key") and value Get("key").String()
salmonix opened this issue · comments
Laszlo Forro commented
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"?>