您的位置:首页 > Web前端 > JavaScript

golang json 封装包

2016-12-16 09:46 309 查看
写这个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)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: