mirror of https://github.com/tidwall/gjson.git
Disable html escaping
This commit removes the automatic escaping of html characters, effectively rendering JSON strings in the same way as is the builtin Go encoder with SetEscapeHTML(false). This should not affect the quality of the resulting JSON and hopefully will not cause any downstream issues.
This commit is contained in:
parent
c2bc5a409a
commit
28d458b14c
3
gjson.go
3
gjson.go
|
@ -1940,9 +1940,6 @@ func AppendJSONString(dst []byte, s string) []byte {
|
||||||
dst = append(dst, 'u')
|
dst = append(dst, 'u')
|
||||||
dst = appendHex16(dst, uint16(s[i]))
|
dst = appendHex16(dst, uint16(s[i]))
|
||||||
}
|
}
|
||||||
} else if s[i] == '>' || s[i] == '<' || s[i] == '&' {
|
|
||||||
dst = append(dst, '\\', 'u')
|
|
||||||
dst = appendHex16(dst, uint16(s[i]))
|
|
||||||
} else if s[i] == '\\' {
|
} else if s[i] == '\\' {
|
||||||
dst = append(dst, '\\', '\\')
|
dst = append(dst, '\\', '\\')
|
||||||
} else if s[i] == '"' {
|
} else if s[i] == '"' {
|
||||||
|
|
|
@ -2549,9 +2549,17 @@ func TestGroup(t *testing.T) {
|
||||||
assert(t, res == `["123"]`)
|
assert(t, res == `["123"]`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func goJSONMarshal(i interface{}) ([]byte, error) {
|
||||||
|
buffer := &bytes.Buffer{}
|
||||||
|
encoder := json.NewEncoder(buffer)
|
||||||
|
encoder.SetEscapeHTML(false)
|
||||||
|
err := encoder.Encode(i)
|
||||||
|
return bytes.TrimRight(buffer.Bytes(), "\n"), err
|
||||||
|
}
|
||||||
|
|
||||||
func testJSONString(t *testing.T, str string) {
|
func testJSONString(t *testing.T, str string) {
|
||||||
gjsonString := string(AppendJSONString(nil, str))
|
gjsonString := string(AppendJSONString(nil, str))
|
||||||
data, err := json.Marshal(str)
|
data, err := goJSONMarshal(str)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(123)
|
panic(123)
|
||||||
}
|
}
|
||||||
|
@ -2579,7 +2587,7 @@ func TestJSONString(t *testing.T) {
|
||||||
testJSONString(t, "R\xfd\xfc\a!\x82eO\x16?_\x0f\x9ab\x1dr")
|
testJSONString(t, "R\xfd\xfc\a!\x82eO\x16?_\x0f\x9ab\x1dr")
|
||||||
testJSONString(t, "_\xb9\v\xad\xb3|X!\xb6\xd9U&\xa4\x1a\x95\x04")
|
testJSONString(t, "_\xb9\v\xad\xb3|X!\xb6\xd9U&\xa4\x1a\x95\x04")
|
||||||
data, _ := json.Marshal("\b\f")
|
data, _ := json.Marshal("\b\f")
|
||||||
if (string(data) == "\"\\b\\f\"") {
|
if string(data) == "\"\\b\\f\"" {
|
||||||
// Go version 1.22+ encodes "\b" and "\f" correctly.
|
// Go version 1.22+ encodes "\b" and "\f" correctly.
|
||||||
testJSONString(t, "\b\f")
|
testJSONString(t, "\b\f")
|
||||||
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
Loading…
Reference in New Issue