Golang如何解析post请求中的json字符串

目录

问题

解决

问题

使用Golang开发服务器,最常用的使用场景之一就是处理各种http请求。那么我们如何使用Golang解析Post请求中的Json字符串呢?今天我们就来通过一个实例了解一下。

解决

首先,我们需要定义好对应的消息结构,也就是前端请求服务器的API接口。定义接口的话推荐使用工具YAPI编写,支持预览、编辑、导出,非常方便。自己平时用的比较多。

Description

比如,定义如下接口:

1 type recordConfig struct { 2 3 StreamPath string `json:"streamPath"` 4 5 Append bool `json:"append"` 6 7 Protocol string `json:"protocol"` 8 9 Url string `json:"url"` 10 11}

接口完成后,接下来我们开始处理http的请求。对于http请求,我们知道post请求的参数都是放在body中,我们需要先获取body,再解析其中的参数。

通过代码,我们来看一下如何读取对应请求的body信息。

代码如下:

1body, err := ioutil.ReadAll(r.Body) 2 3defer r.Body.Close() 4 5if err != nil { 6 7 return 8 9}

点击并拖拽以移动最后,解析Json字符串为Json对象。 注意:这里有两种方式,都是非常方便的,具体方式请自选。

但是,这两种方法都需要首先入库json库,代码:

1import ( 2 "encoding/json" 3)

方法一、利用Unmarshal()方法

Unmarshal是json库的一个内部方法,它的第一个参数是json字符串,第二个参数是接受json解析的数据结构。 注意:第二个参数必须是指针,否则无法接收解析的数据。

Unmarshal方法的源码:

1// When unmarshaling quoted strings, invalid UTF-8 or 2// invalid UTF-16 surrogate pairs are not treated as an error. 3// Instead, they are replaced by the Unicode replacement 4// character U+FFFD. 5func Unmarshal(data []byte, v interface{}) error { 6 var d decodeState 7 err := checkValid(data, &d.scan) 8 if err != nil { 9 return err 10 } 11 d.init(data) 12 return d.unmarshal(v) 13}

通过源码我们知道,Unmarshal方法处理的参数1是一个字节数组。这一点非常好,因为 body 中就是字节数组的形式,所以我们可以直接使用。

最后,我们给出对应的代码实例:

1var conf recordConfig 2 3err := json.Unmarshal(body, &conf)

接下来,我们看方法二。点击并拖拽以移动

方法二、利用NewDecoder组合方法

首先,我们看一下源码:

1// NewDecoder returns a new decoder that reads from r. 2// The decoder introduces its own buffering and may 3// read data from r beyond the JSON values requested. 4func NewDecoder(r io.Reader) *Decoder { 5 return &Decoder{r: r} 6}

我们知道,NewDecoder方法只需要一个参数,类型是io.Reader,而 r.Body 的类型正好符合,所以我们不用像方法一那样,需要用下面的方法进行转换。

1ioutil.ReadAll(r.Body)

最后,给出对应的代码实例:

1var conf recordConfig 2 3err := json.NewDecoder(r.Body).Decode(&conf)

点击并拖拽以移动至此,我们就可以使用 conf.StreamPath 获取流路径信息了。然后,开始服务器的后续工作。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

Android如何解析json字符串

前言上一篇文章介绍了服务器用Golang如何解析json字符串,今天我们来看看Android客户端是如何解析json字符串的。正文Golang如何解析post请求中的json字符串(https://www.helloworld.net/p/O917HGeiALU2D)使用java语句如何正确解析json字符串呢?举一个例子,假如我们想从rtc_i