golang json 封装包

写这个json 主要是为了  回忆基础知识,不清楚还缺什么。自己再构思一下

package main

import (
	"encoding/json"
	"fmt"
)

//创建一个 json 构造体用来存储数据
type MyJsonPro struct {
	data interface{}
}

//json 构造体创建
func NewMyJsonPro(s string) *MyJsonPro {
	j := new(MyJsonPro)
	var r interface{}
	//解析对应的json 串 如果解析失败返回错误信息 否则 赋值给 r对应的数据
	err := json.Unmarshal([]byte(s), &r)

	if err != nil {
		return j
	}
	j.data = r
	return j
}

//获取 map 类型数据
func (this *MyJsonPro) GetMapData() map[string]interface{} {
	//使用断言的方式 获取MyJsonPro data的值取[map[string]interface{}类型数据
	if j, err := (this.data).(map[string]interface{}); err != false {
		return j
	}
	return nil
}

//获取对应 key 的值
func (this *MyJsonPro) GetValue(key string) interface{} {
	//获取对应的map数据
	d := this.GetMapData()
	//查看对应的 map数据中是否存在 值 如果存在进行赋值 否则 赋值为nil 值
	if s, err := d[key]; err != false {
		return s
	}
	return nil
}

//获取对应下标的值  需要传递 数组下标
func (this *MyJsonPro) GetIndex(index interface{}) interface{} {
	//使用断言的方式 获取MyJsonPro data的值取[]interface{}类型数据
	if d, err := (this.data).([]interface{}); err != false {
		num, int_err := index.(int)
		//如果断言方式取int类型的值失败
		if int_err != true {
			return nil
		}
		//防止数组越界 slice类型 下标从 0 开始如果小于0或导致报错
		if len(d)-1 < num || num < 0 {
			return nil
		}
		return d[num]
	}

	//使用断言的方式 获取MyJsonPro data的值取[map[string]interface{}类型数据
	if map_arr, set := (this.data).(map[string]interface{}); set != false {
		key, string_err := index.(string)
		//如果断言方式取stirng类型的值失败
		if string_err != true {
			return nil
		}
		if r, isset := map_arr[key]; isset != false {
			return r
		}

	}

	return nil
}

func main() {
	var xiao string = `{"return": "xiao","name":"xiaochuan"}`
	j := NewMyJsonPro(xiao)
	r := j.GetValue("return")
	fmt.Println(r)
	i := j.GetIndex("name")
	fmt.Println(i)

}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一名路过的小码农

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值