面向CSDN编程之:golang读取json文件,并序列化为字符串

golang读取JSON文件

1. 背景

周末花了两天写了一个爬取、并解析HMDB数据库的工具,为了能够根据需要修改关键搜索参数,我使用了配置文件的方式进行配置。配置文件当时为了快速省事,直接采用了json文件。
请添加图片描述
请添加图片描述

在程序启动时,读取配置文件中的参数,然后使用这部分参数从HMDB网站获取数据,也算是比较灵活方便了。

2. 实现

由于配置文件比较小,这里我直接读取了整个文件内容;然后将其解析成对应的结构体

type ReqParam struct {
	SearchMode     string   `json:"ms_search_ion_mode"`
	AdductType     []string `json:"adduct_type"`
	Tolerance      string   `json:"tolerance"`
	ToleranceUnits string   `json:"tolerance_units"`
	CcsPredictors  string   `json:"ccs_predictors"`
	CcsTolerance   string   `json:"ccs_tolerance"`
}


func ReadReqParamConfig(fileName string) string {
	f, err := os.Open(fileName)
	if err != nil {
		fmt.Println(err)
		return ""
	}
	r := io.Reader(f)

	param := &ReqParam{}
	if err = json.NewDecoder(r).Decode(param); err != nil {/********************/
		panic(err)
	}

	return param.Trans2String()
}

func (rp ReqParam) Trans2String() string {//转换为http post载荷格式
	str := make([]byte, 0, 1024)
	{
		ss := fmt.Sprintf("&ms_search_ion_mode=%s", rp.SearchMode)
		str = append(str, []byte(ss)...)
	}

	{
		for _, v := range rp.AdductType {
			ss := "&adduct_type%5B%5D=" + v
			str = append(str, []byte(ss)...)
		}
	}
	{
		ss := fmt.Sprintf("&tolerance=%s", rp.Tolerance)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&tolerance_units=%s", rp.ToleranceUnits)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&ccs_predictors=%s", rp.CcsPredictors)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&ccs_tolerance=%s", rp.CcsTolerance)
		str = append(str, []byte(ss)...)
	}
	{
		ss := fmt.Sprintf("&commit=%s", "Search")
		str = append(str, []byte(ss)...)
	}
	return strings.ReplaceAll(string(str), "+", "%2B")
}

3. HMDB爬虫工具效果

这里是最后的结果,上面介绍的只是其中一个很小的功能,虽然很简单,但是我还是百度出来的。正所谓:面向CSDN编程。为了以后能够更快,更准,更高效的面向CSDN编程,特将此小小功能记录下来。
请添加图片描述

请添加图片描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:Age of Ai 设计师:meimeiellie 返回首页
评论

打赏作者

叨陪鲤

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值