当前位置: 首页 > news >正文

gin 框架的 JSON Render

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 标准库 JSON
  • IndentedJSON 缩进 JSON
  • SecureJSON 安全 JSON
  • JsonpJSON JSONP JSON
  • AsciiJSON ASCII JSON
  • PureJSON 纯粹的 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 hijacking,JSON 劫持,可能会泄露敏感数据(看起来是利用了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,比较适用于开发调试,这里就不贴图了。

http://www.lryc.cn/news/183781.html

相关文章:

  • 《Dataset Condensation with Differentiable Siamese Augmentation》
  • 多普勒频率相关内容介绍
  • win10睡眠快捷方式
  • C++中的static和extern关键字
  • JAVA经典百题之找完数
  • CSS 滚动驱动动画 view-timeline-inset
  • ansible部署二进制k8s
  • Nginx限流熔断
  • QQ登录的具体流程
  • 用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路
  • 接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
  • 计算机竞赛 深度学习机器视觉车道线识别与检测 -自动驾驶
  • pyqt5使用经验总结
  • 【MQTT】mosquitto库中SSL/TLS相关API接口
  • 假期题目整合
  • Redisson—分布式服务
  • volatile使用方法
  • 提升您的 Go 应用性能的 6 种方法
  • 计算摄像技术02 - 颜色空间
  • Pytorch笔记之分类
  • 【目标检测】——PE-YOLO精读
  • Java 数组转集合
  • Elasticsearch:ES|QL 查询语言简介
  • qt qml中listview出现卡顿情况时的常用处理方法
  • Elasticsearch基础操作演示总结
  • Spring 作用域解析器AnnotationScopeMetadataResolver
  • 如何发布一个 NPM 包
  • Flask小项目教程(含MySQL与前端部分)
  • Eureka
  • STM32G070RBT6-MCU温度测量(ADC)