推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Golang Gin 实战(八)| JSON渲染输出

   2023-08-09 网络整理佚名1350
核心提示:JSON方法非常强大,不止可以用于map的输出,还可以把我们自定义的对象转为一个json字符串输出。完美、简单的把这个用户的信息作为一个JSON字符串输出。在一些情况下,比如我们需要获取所有用户信息,那么表达为JSON字符串来说,就是一个JSON数组。输出JSON字符串,现在运行打开浏览器,访问:8080/users就可以看到如下信息,一个JSON数组字符串:

现在开发了API,输出基本都是JSON格式。 与旧的 XML 格式相比,JSON 轻量、简洁、易于传输,因此目前的 API 被大量使用。

Gin对JSON API的支持非常友好,让我们可以非常方便地开发基于JSON的API。

快速开始

func main() {
    r := gin.Default()
    r.GET("/hello"func(c *gin.Context) {
        c.JSON(200, gin.H{"message""hello world"})
    })
    r.Run(":8080")
}

一个很简单的例子,主要的知识点就在于c.JSON方法,它可以让我们非常方便的输出JSON格式的内容。

现在运行并打开浏览器访问:8080/hello,可以看到以下内容:

{"message":"hello world"}

这是一个 JSON 格式的字符串。 第三方调用者可以获取JSON内容,将其转换为JSON对象,然后通过字段获取对应的值,这就是hello world。

这里我们使用gin.H类型来构造一个键值对对象。 事实上,gin.H是一个map[]{}。

// H is a shortcut for map[string]interface{}
type H map[string]interface{}

gin.H主要是为了帮助我们开发者轻松构建一个map对象,不仅适用于c.JSON方法,也适用于其他场景。

转为 JSON

C。 JSON方法非常强大。 它不仅可以用于map输出,还可以将我们自定义的对象转换为json字符串输出。

func main() {
    r := gin.Default()

    r.GET("/users/123"func(c *gin.Context) {
        c.JSON(200, user{ID: 123, Name: "张三", Age: 20})
    })

    r.Run(":8080")
}

type user struct {
    ID   int
    Name string
    Age  int
}

本例中我们自定义一个来代表用户,然后注册一条用户ID为123的路由来输出用户的信息。 这里使用的是直接将其作为参数传递给c.JSON方法。

现在我们运行,在浏览器中访问:8080/users/123,可以看到以下信息:

{"ID":123,"Name":"张三","Age":20}

完美简单地将用户信息输出为JSON字符串。

自定义 JSON 字段名称

看上面的例子,我们发现输出的JSON字符串的字段和我们定义的用户的字段名是一样的,但是这种命名格式显然不适合JSON,因为JSON的字段应该以小写字母开头,比较符合目前大家遵循的JSON风格。

Gin 支持字段名重命名,而且非常简单,就像原生 JSON 一样。

type user struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
    Age  int    `json:"age"`
}

只需在定义字段时添加 json 标签即可。 Tag的内容可以参考我之前写的这篇文章,这里不再赘述。

现在我们重新运行,在浏览器中访问:8080/users/123,发现我们看到的信息发生了变化:

{"id":123,"name":"张三","age":20}

更符合JSON的风格,看起来更顺眼。

JSON数组

有些情况,比如我们需要获取所有的用户信息,那么表示为一个JSON字符串,它就是一个JSON数组。 在Gin中,生成JSON数组也很简单,只要我们传递给c.JSON的参数是一个数组即可。

    allUsers := []user{{ID: 123, Name: "张三", Age: 20}, {ID: 456, Name: "李四", Age: 25}}
    r.GET("/users"func(c *gin.Context) {
        c.IndentedJSON(200, allUsers)
    })

我们首先定义一个user数组,然后使用c。 输出 JSON 字符串。 现在运行并打开浏览器,访问:8080/users可以看到如下信息,一个JSON数组字符串:

[
    {
        "id"123,
        "name""张三",
        "age"20
    },
    {
        "id"456,
        "name""李四",
        "age"25
    }
]

美化

在上面的例子中,我们可以看到输出的JSON字符串是扁平的,没有缩进,而且并不美观。 针对这种情况,Gin还为我们提供了一种方便的方法,让我们的输出JSON看起来更好。

    r.GET("/users/456"func(c *gin.Context) {
        c.IndentedJSON(200, user{ID: 456, Name: "李四", Age: 25})
    })

如果想美化JSON输出,可以使用c. 方法。 现在我们运行:8080/users/456,可以看到JSON已经被美化了,更容易阅读了。 。

{
    "id"456,
    "name""李四",
    "age"25
}

对于JSON字符串中的特殊字符串,例如

 
标签: golang 数组
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON