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

golang 转换json字符串为json对象的小问题

2015-12-19 00:27 861 查看
前段时间修改了一个小小的管理系统,本来是挺简单的 按照用户需求显示一些数据,但是却为了一个小小的错误,竟然找了两个晚上的bug,白天上课,所以只能晚上做东西了,好了,进入正题。

一般我们在js中发送一个json对象时,会使用JSON.stringify() 将一个json对象转换为json字符串,再发送.e.g

var obj = {
"item1":"item1",
"item2":"item2",
"item3":"item3"
};
console.log(obj);
console.log(JSON.stringify(obj));
$.ajax({
url: "/test",
type: "POST",
data: {
"data":JSON.stringify(obj)
},
dataType:"json",
success:function(data){
//dosomething
},
error:function(arg_msg){
//dosomething
}
});




可以看到第一次打印obj是一个json对象,而第二次打印是一个stirng,而我们就是要发送这一个json字符串。

首先贴上golang的代码:

type Obj struct {
item1   string `item1`
item2   string `item2`
item3   string `item3`
}
func TestHandle(w http.ResponseWriter, r *http.Request){
fmt.Println("test start...")
obj := Obj{}
r.ParseForm()
temp := r.FormValue("data") //receive value form js
fmt.Println(temp)           //type string
err := json.Unmarshal([]byte(temp),&obj)
if(err != nil ){
fmt.Println("json error")
}
fmt.Println(obj.item1)      //如果显示成功,说明golang转换json成功
}


然后我们看看golang得到了什么



得到这个字符串了,但是却不能使用obj.item1,为什么呢,golang 结构体当中大写开头的是可导出字符,小写开头的是不可导出字符。就类似于c++中class的public, private,小写只能内部访问,大写就相当于public了。

type Obj struct {
Item1   string `item1`
Item2   string `item2`
Item3   string `item3`
}




obj.Item1就得到了,是不是很简单啊,嘻嘻,感觉这和写c++时找了好几小时的错误,结果就是变量名写错了,少写个分号或者函数声明的参数和函数定义的参数不同的错误一样,就是这么坑。

上传了一个刚刚写的小demo。

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