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标签(默认开启)。

在这里插入图片描述

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.hqwc.cn/news/125632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

##***

本文涵盖了一种名为"快速编写论文,课设辅助器"的智能人工智能(AI)系统。该系统旨在提供高效的论文和课程设计撰写辅助功能。通过利用先进的自然语言处理和机器学习算法,该系统能够自动生成与特定主题相关的内容&#xf…

beego-简单项目写法--路径已经放进去了

Beego案例-新闻发布系统 1.注册 后台代码和昨天案例代码一致。,所以这里面只写一个注册的业务流程图。 **业务流程图 ** 2.登陆 业务流程图 登陆和注册业务和我们昨天登陆和注册基本一样,所以就不再重复写这个代码 但是我们遇到的问题是如何做代码的迁移&…

Java笔记七(封装,继承与多态)

封装 该露的露,该藏的藏 程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用 封装(数据的隐藏) 通常,…

Android 开发错误集合

🔥 开发错误集合一 🔥 Caused by: java.lang.ClassNotFoundException: Didnt find class "com.mask.app.ui.LoginRegisterActivity" on path: DexPathList[[zip file "/data/app/~~NMvHVhj8V6-HwGbh2amXDA/com.mask.app-PWbg4xIlETQ3eVY…

mysql面试题10:MySQL中有哪几种锁?表级锁、行级锁、页面锁区别和联系?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Mysql中有哪几种锁? 在MySQL中,主要有以下几种类型的锁: 共享锁(Shared Lock):也称为读锁。多个事务可以同时持有共享锁,可以读取但不能修…

目标检测算法改进系列之Backbone替换为FocalNet

FocalNet 近些年,Transformers在自然语言处理、图像分类、目标检测和图像分割上均取得了较大的成功,归根结底是自注意力(SA :self-attention)起到了关键性的作用,因此能够支持输入信息的全局交互。但是由于…

全志ARM926 Melis2.0系统的开发指引⑤

全志ARM926 Melis2.0系统的开发指引⑤ 编写目的8. 固件修改工具(ImageModify)使用8.1.界面说明8.2.操作步骤8.2.1. 配置平台8.2.2. 选择固件8.2.3. 选择要替换的文件8.2.4. 替换文件8.2.5. 保存固件 8.3.注意事项8.4.增加固件修改权限设置8.4.1. 概述8.4.2. 操作说明8.4.2.1.打…

Python 无废话-基础知识流程控制语句

If 流程控制语句 最常见的控制流语句是if 语句。在自然语言中,if 语句念起来可能是:“如果条件为真,执行子句中的代码。”在Python中的条件语句用于根据特定条件执行不同的代码块条件。 用代码描述如下: cost 60000 if cost &…

nodejs+vue游戏测评交流系统elementui

可以实现首页、发布招募、公司资讯、我的等,另一方面来说也可以提高在游戏测评交流方面的效率给相关管理人员的工作带来一定的便利。在我的页面可以对游戏攻略、我的收藏管理、实际上如今信息化成为一个未来的趋势或者可以说在当前现代化的城市典范中,发布招募等功能…

大语言模型之十五-预训练和监督微调中文LLama-2

这篇博客是继《大语言模型之十二 SentencePiece扩充LLama2中文词汇》、《大语言模型之十三 LLama2中文推理》和《大语言模型之十四-PEFT的LoRA》 前面博客演示了中文词汇的扩充以及给予LoRA方法的预训练模型参数合并,并没有给出LoRA模型参数是如何训练得出的。 本篇…

014-第二代软件开发

第二代软件开发 文章目录 第二代软件开发项目介绍正式开始我们的Debian Qt 软件开发主题色QSS U盘检测QFileSystemWatcher 屏幕键盘LibUSB 使用 总结 关键字: Qt、 Qml、 U盘检测、 屏幕键盘、 LibUSB 项目介绍 欢迎来到我们的 QML & C 项目!这…

嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动

系列文章目录 文章目录 系列文章目录前言IMX6ULL介绍主要资料IO表现形式 汇编LED驱动原理图初始化流程时钟设置IO复用设置电气属性设置使用GPIO 编写驱动编译程序编译.o文件地址链接.elf格式转换.bin反汇编(其他) 综合成Makefile完成一步编译烧录程序imx…