In: Javascript| Web前台相关
23 Feb 2010修正了几个BUG,已经在实际项目中使用,没有问题。
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
Array.prototype.indexOf || (Array.prototype.indexOf = function(value) {
for (var i in this) {
if (this[i] == value) {
return i;
[...]
In: Javascript| Web前台相关
31 Jul 2009昨天用js写了一个Json_encode的工具函数,附上模仿jQuery并加强的extend函数。
对于extend函数,主要加强的是可以遍历子对象来extend,而不是简单的覆盖。
getJSON的使用方法:
jlUtil.getJSON(obj:Object [, skip_arr:Array])
//skip_arr指定要忽略的键名
extend的使用方法:
jlUtil.extend(obj:Object [, obj2:Object…])
//这个函数需要jQuery
//如果只带一个参数,则这个obj将被extend到jlUtil本身
//如果带两个以上的参数,则第2个及以后的参数将被extend到第一个参数
下面是代码:
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
var jlUtil = {
getJSON: function(obj, skip_arr){
if(typeof obj == "number"
|| typeof obj == "boolean"){
return obj;
}else if(typeof obj == "string"){
return "’" + obj.replace("’","\\’") + "’";
}
var json = [];
skip_arr = skip_arr ? skip_arr : [];
for(var key in obj){
//skip function and the keys in skip arr
if(obj[key].constructor == Function
|| skip_arr.indexOf(key) != -1){
continue;
}
//in Array loop
if(!isNaN(parseInt(key)) || key.constructor [...]
今天被json编码中文搞死了。。。
json_encode中文的时候,会把每个中文字符encode成“\uxxxx”
而存进数据库的时候,“\”被屏蔽了,直接变成”uxxxx”
郁闷,我还以为是json_decode的问题。。。在网上查了一个下午资料都没解决
直到发现网上的文章都说json_encode是把中文encode成“\uxxxx”,我才顿悟。。。
经过一番实验,才发现问题出在存储到数据库的环节。。。
特此纪念一下
至于解决办法,当然是让”\”保留啦,把”\” replace成”\\”就可以啦~
还有一个问题,差点忘了,就是json_decode以后返回的不是array,而是stdclass,有一个很郁闷的问题,如果hash带下划线,如json['xx_yy']会出现很奇怪的问题,页面什么都不显示,也不报错,差点晕死。有一个办法解决,就是先foreach一下,把带下划线的存到一个array里面,或者直接整个转存成array。
//感谢软工的回复
由于已经是2年前写的博客,也没有写实际场景,我已经忘记json_decode是在什么场景下出现的问题。
如果我没有记错的话,当时json_decode还没有第二个参数。
姓名:郑玏
性别:男
职业:IT工程师
爱好:KTV、乒乓球、台球、五子棋、围棋、编程
语言:中文、英语、闽南语
Email: