json2.js主要功能是做什么的?
json2.js提供了json的序列化和反序列化方法,可以将一个json对象转换成json字符串,也可以将一个json字符串转换成一个json对象。
json2.js在浏览器不支持json.parse的内置方法时,最有效。json2.js会创建一个内部的全局变量,提供json对象与字符串之间的转换。
由于eval已经不提倡使用了,并存在一定的危险,建议使用内置parse json的方法,或者直接使用json2.js。
eval在以前一篇中有使用:[Jquery+ashx 实现ajax访问服务端json数据代码示例]
json2.js的源码地址:
https://github.com/douglascrockford/JSON-js
Visual Studio用户可以直接通过Nuget来获得。
使用方法很简单:
1、引用json2.js:
1
|
<
script
type
=
"text/javascript"
src
=
"json2.js"
></
script
>
|
2、调用方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
<script>
//直接声明json数据结构
var
myJSONObject = {
"bindings"
: [
{
"ircEvent"
:
"PRIVMSG"
,
"method"
:
"newURI"
,
"regex"
:
"^http://.*"
},
{
"ircEvent"
:
"PRIVMSG"
,
"method"
:
"deleteURI"
,
"regex"
:
"^delete.*"
},
{
"ircEvent"
:
"PRIVMSG"
,
"method"
:
"randomURI"
,
"regex"
:
"^random.*"
}
]
};
//声明字符串,可对比一下json文本与我们正常文本的区别
var
normalstring=
'[{persons:[{name:"jordan",sex:"m",age:"40"}, {name:"bryant",sex:"m",age:"28"}, {name:"McGrady",sex:"m",age:"27"} ]}]'
;
var
jsontext=
'[{"persons":[{"name":"jordan","sex":"m","age":"40"}, {"name":"bryant","sex":"m","age":"28"}, {"name":"McGrady","sex":"m","age":"27"} ]}]'
;
//调用eval函数转换为json对象,
var
myE = eval(normalstring);
document.writeln(myE
'<br><br>'
);
//将json对象转换为字符串
var
text = JSON.stringify(myE);
//对比转换后的json文本与声明的文本区别
document.writeln(
'转换后的json文本:'
text
'<br><br>声明的json格式文本'
jsontext
'<br><br>声明的普通格式文本'
normalstring
'<br><br>'
);
//当安全比较重要的时候使用JSON解析就好一些。JSON解析只会识别JSON文本并且它更安全,下面调用json的parse函数对文本数据转换生成json数据结构
var
myData = JSON.parse(jsontext);
document.writeln(myData
'<br><br>'
);
//下面是对json对象的增删查改操作
//声明json对象
var
jsonObj2={persons:[{name:
"jordan"
,sex:
"m"
,age:
"40"
}, {name:
"bryant"
,sex:
"m"
,age:
"28"
}, {name:
"McGrady"
,sex:
"m"
,age:
"27"
} ]};
var
persons=jsonObj2.persons;
var
str=
""
;
var
person={name:
"yaoMing"
,sex:
"m"
,age:
"26"
};
//以下为json对象的操作,去掉注释可以查看操作结果
//jsonObj2.persons.push(person);//数组最后加一条记录
//jsonObj2.persons.pop();//删除最后一项
//jsonObj2.persons.shift();//删除第一项
jsonObj2.persons.unshift(person);
//数组最前面加一条记录 只要适合Javascript的方法都是可以用在JSON对象的数组中的!所以还有另外的方法splice( )进行crud操作! //删除
//jsonObj2.persons.splice(0,2);//开始位置,删除个数
//替换不删除
var
self={name:
"tom"
,sex:
"m"
,age:
"24"
};
var
brother={name:
"Mike"
,sex:
"m"
,age:
"29"
};
jsonObj2.persons.splice(1,0,self,brother,self);
//开始位置,删除个数,插入对象
//替换并删除
//jsonObj2.persons.splice(0,1,self,brother);//开始位置,删除个数,插入对象
for
(
var
i=0;i<persons.length;i ){
var
cur_person=persons[i]; str =cur_person.name
"'sex is "
cur_person.sex
" and age is "
cur_person.age
"<br><br>"
; }
document.writeln(str);
//转换为json文本
var
myjsonobj = JSON.stringify(jsonObj2);
document.writeln(myjsonobj);
</script>
|
3、增强功能:
比如说,我们的数据非常复杂,还有类似头像,昵称,个人签名之类的信息。
可是我保存在本地,只需要用户名,和性别,肿么破呢?
也许你会说 so easy, 遍历数据重新提取下即可。
例如:
data = [
{name: , sex:, age: },
{name: , sex:, age: },
{name: , sex:, age: }
]; ( i=, new_data=[]; i<data.length; i++) {
new_data.push({
name: data[i].name,
sex: data[i].sex
});
} str_json = .stringify(new_data);
console.log(str_json);
var data = [ {name: "王尼玛", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大锤", sex:1, age: 30} ]; for (var i=0, new_data=[]; i<data.length; i++) { new_data.push({ name: data[i].name, sex: data[i].sex }); } var str_json = JSON.stringify(new_data); console.log(str_json);
确实分分钟搞定。
其实我们只需要用 stringify 第二个参数即可简单处理这种问题。
data = [
{name: , sex:, age: },
{name: , sex:, age: },
{name: , sex:, age: }
]; str_json = .stringify(data, [, ]);
console.log(str_json);
var data = [ {name: "王尼玛", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大锤", sex:1, age: 30} ]; var str_json = JSON.stringify(data, ["name", "sex"]); console.log(str_json);
第二个参数只要传入需要的keys数组,就非常轻松的就完成这种处理了。
当然如果我们要更纠结的处理,比如要把 1,0 修改为男女,那么第二个参数可以用回调函数来处理。
data = [
{name: , sex:, age: },
{name: , sex:, age: },
{name: , sex:, age: }
]; str_json = .stringify(data,
(k === ) { [, ][v];
} v;
});
console.log(str_json);
var data = [ {name: "王尼玛", sex:1, age: 30}, {name: "王尼美", sex:0, age: 20}, {name: "王大锤", sex:1, age: 30} ]; var str_json = JSON.stringify(data, function (k, v) { if (k === "sex") { return ["女", "男"][v]; } return v; }); console.log(str_json);
第二个参数如此强悍,为我们省去了不少麻烦。
参考:
http://blog.youkuaiyun.com/mine_1/article/details/6456792
http://www.cnblogs.com/youring2/archive/2013/03/01/2938850.html