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)
}
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)
}
相关文章推荐
- json封装 与 解析
- golang结构体json的时间格式化解决方案
- 自己封装ajax,json.
- golang的json操作
- 推荐一个golang的json库
- Gson 封装,json从此很简单
- http中使用json封装数据的性能测试
- 将数据封装为Json数据示例
- [置顶] 动态grid java 后台封装json数据返回到前台解析并展示
- ABP+AdminLTE+Bootstrap Table权限管理系统第六节--abp控制器扩展及json封装以及6种处理时间格式化的方法
- 项目实战:JSON数据封装与解析及常见问题(文末小彩蛋)
- Cocos2dx封装、解析Json(cpp版)数据
- httpclient模拟post请求json封装表单数据
- Golang绑定Lua脚本,小小封装一下
- 使用List<Object>封装的JsonObject等类的读取方法
- golang 之 JSON
- 使用json-lib封装json
- 通过jquery封装的ajax获取后台json数据
- nodejs如何把数据封装成json格式数据?
- golang:json.Marshal转结构体,结构体属性为空