做网上招聘哪个网站好,网站推广目的,sedo这种多语言网站怎么建设,网站建设项目策划书模板范文gin 框架的 JSON Render
gin 框架默认提供了很多的渲染器#xff0c;开箱即用#xff0c;非常方便#xff0c;特别是开发 Restful 接口。不过它提供了好多种不同的 JSON Render#xff0c;那么它们的区别是什么呢#xff1f;
// JSON contains the given interface obje…gin 框架的 JSON Render
gin 框架默认提供了很多的渲染器开箱即用非常方便特别是开发 Restful 接口。不过它提供了好多种不同的 JSON Render那么它们的区别是什么呢
// JSON contains the given interface object.
type JSON struct {Data any
}// IndentedJSON contains the given interface object.
type IndentedJSON struct {Data any
}// SecureJSON contains the given interface object and its prefix.
type SecureJSON struct {Prefix stringData any
}// JsonpJSON contains the given interface object its callback.
type JsonpJSON struct {Callback stringData any
}// AsciiJSON contains the given interface object.
type AsciiJSON struct {Data any
}// PureJSON contains the given interface object.
type PureJSON struct {Data any
}这是框架自带的 6 种 JSON Render
JSON 标准库 JSONIndentedJSON 缩进 JSONSecureJSON 安全 JSONJsonpJSON JSONP JSONAsciiJSON ASCII JSONPureJSON 纯粹的 JSON
下面就让我们来依次看一下它们的区别不过这里只是简单介绍一下我主要想说的是默认的 JSON 和 PureJSON其它的就一笔带过了不过我也看了一些其它的博客也把相关链接添加进来了。
代码示例
Standary JSON 通用的 JSON 即是 Golang 自带的 json 库所以它会自动将html标签进行转义将它们变成 Unicode 码的形式。 gin 默认的 JSON 库是 Go 的标准库当然为了最求性能你可以自行替换成其它更快的 JSON 实现例如 easyjson 等。 默认的 JSON 实现会自动将 HTML 标签进行转义避免的方法是创建一个 JSON 编码器。 是否转移是依靠 escapeHTML 这个属性进行控制的。 然后在编码时会依据该属性来决定是否转义HTML标签默认开启。 这篇博客的探索过程写得很好还是应该多主动探索解决Go json.Marshal() 将HTML字符串转义的问题
Pure JSON 字面意思就是 纯粹的 JSON你可以理解上面的是经过转换的所以是不纯粹的了。这个 JSON Render 是结果是原汁原味的我这两天正好输出的 JSON 字符串中带有标签最后就是用的 Pure JSON 解决的问题。它的注释也说明了它不像 JSON不会使用 Unicode 码替换特殊的 HTML 字符。 PureJSON, unlike JSON, does not replace special html characters with their unicode entities. PureJSON 的实现设置了 JSON 编码器的 escapeHTML 属性为 false。 ASCII JSON 这个应该用的比较少了它用于那些不支持 Unicode 的程序它会将所有的非 ASCII 字符都转换成 ASCII 的形式了。 Secure JSON 这个还是比较复杂的它设计一个安全问题JSON hijackingJSON 劫持可能会泄露敏感数据看起来是利用了JS的某些高级特性来实施的。不过它在这里的特点是蛮简单的那就是它会在数组类型值前面加上 while(1);参阅资料显示利用它来无限循环阻止攻击者执行 JSON 数组用于攻击的 JS 脚本。
想要进一步了解请参考一下链接Golang Gin 实战九| JSONP跨域和劫持 Jsonp JSON
Jsonp 是前端常用的一种跨域手段要想理解它需要一些简单的前端知识。这里的 callback 参数就是用户在前端已经定义好的一个函数而整个 JSON 就是它的参数。所以可以看到响应体是类似这种函数调用的结构。特别的它的 Content-Type 被设置为 application/javascript。 注如果不设置 callback 参数则和标准 JSON 结果一样没有区别。
想要进一步了解请参考这个链接Gin 框架 jsonp Indented JSON 缩进 JSON输出经过格式化的 JSON比较适用于开发调试这里就不贴图了。