~~~
求下面的代码 有问题, 我需要 一个转换JSON 一个反序列化到MAP 方便修改值,思路这样的
比如生成JSON值
var a map[string]interface{}
a["code"]="100"
a["msg"]="ok"
result := JSON_Serialize(a)
//这样result得到一串JSON值了
================
反序列化
从数据库或则字符串获取得到一串JSON值
bb := `{"Code":"-1","Msg":"code error!"}`
result2 :=JSON_Deserialize(bb)
//然后修改一些值 修改完毕再转换JSON即可
result2["Code"]=="200"
result2["Msg"]="no123"
result3 := JSON_Serialize(result2)
~~~
~~~
func JSON_Serialize(obj interface{}) (mapOBJ map[string]interface{}, err error) {
b, err := json.Marshal(obj)
if err != nil {
return nil, err
}
return b
}
func JSON_Deserialize(obj interface{}) (mapOBJ map[string]interface{}, err error) {
var result map[string]interface{}
if err := json.Unmarshal(obj, &result); err != nil {
return nil, err
}
return result, nil
}
~~~
大致明白你要做什么了,你可以参考下面这个例子,仅仅是可以使用 还有很多细节需要考虑。同时 我觉得你的思路并不是一个好的设计。
package main
import (
"encoding/json"
"fmt"
)
type Test struct {
Name string
Sex string
Age int
}
type Test2 struct {
Code int
Msg Test
}
func JSON_Serialize(obj interface{}) (b []byte, err error) {
b, err = json.Marshal(obj)
if err != nil {
return nil, err
}
return b, nil
}
func JSON_Deserialize(req []byte) (s map[string]interface{}, err error) {
err = json.Unmarshal(req, &s)
if err != nil {
return nil, err
}
return s, nil
}
func main() {
test := Test{"zy", "male", 20}
test2 := Test2{0, test}
req, _ := JSON_Serialize(&test2)
fmt.Println(string(req))
req2map, _ := JSON_Deserialize([]byte(req))
fmt.Println(req2map)
req2map["Code"] = 5
fmt.Println(req2map)
}
这个代码有些问题,比如会不经意间修改了json数据节点的值类型,而不会报错。再比如如果json有嵌套结构你还是需要用类型断言来处理。
#9
更多评论