使用php的json_encode函数将数组转换成json字符给js处理?
大家都知道js在处理json的时候是非常方便的了,例如jsonM[i].name,就可获取到[{'name':'james'}, {'name','jacob'}]中的值了......此处省略1000字,但是大多情况下我们面对的问题是从据库读出数组后如何获得json格式字符 串呢,当然你可以用基本的循环拼字符串的方法,但这样一是很麻烦,因为json里面有很多' 或",有时遗漏程序会出错,进而你会非常抓狂,例如 如何判断最后一个元素,之后不加逗号就狠痛苦,因为同级Json字符串是不带逗号的,虽然加了好像没问题,但从严谨的角度写程序这是不合适的,不能太取巧 了,指不定哪天就出问题了.
闲话不多说,以下就说说我用Php+MYSql处理Json的方法吧,大家都知道,Php里有个函数叫 json_encode,这个函数可以将一个数组直接转换成json字符串!!!这个函数非常有用,他返回的结果就是我们要的东东,但我为什么还有说的必 要呢?因为到这里分两种情况,如果你的页面是Utf-8的,你可以把我这篇文章当成废话,如果是GBk的那么事情只完成了一半,因为 json_encode只支持Utf-8编码,如果是GBk的情况下
他会有选择的对其中的英文数字有效,而数组里的中文会以NULL来显示,这时 可以参考以下方法转换,当然你有更好的方法欢迎来扔出宝贵砖头(原狠简单 先将中文用urlencode变成一堆类似于%1%2%3%5%6的数字,转换后将Json字符串再用urldecode变回中文)
$rs = mysql_query($sql);
$arr = array();
$i = 0;//数组索引
while($row = mysql_fetch_array($rs)){
//方法一
$row['name1'] = urlencode($row['name1']);
$row['name2'] = urlencode($row['name2']);
$row['name3'] = urlencode($row['name3']);
$arr[$i] = $row;//默认Utf-8
//方法二
// $name1 = urlencode($row['name1']);
// $name2 = urlencode($row['name2']);
// $name3 = urlencode($row['name3']);
// $arr[$i] = array('gd_id'=>$row['gd_id'],'attr1'=>$row['attr1'],'name1'=& gt;$name1,'attr2'=>$row['attr2'],'name2'=>$name2,'attr3'=& gt;$row['attr3'],'name3'=>$name3,'num1'=>$row['num1']);//转成Utf-8
$i++;
}
print_r($arr);echo '<br/>';
$json_attr = json_encode($arr);echo urldecode($json_attr);
配合文件读写例子 不过太麻烦 还是用XML好些
$fname = "user/user_conf.ini";
//修改此处要删除以上文件才有效
$str = json_encode(array(
array("power"=>2,"name"=>urlencode("普通")),
array("power"=>3,"name"=>urlencode("会员")),
array("power"=>4,"name"=>urlencode("协会")))
);
echo $str = urldecode($str);
if(file_exists($fname)){
$file = fopen($fname,"rb+");
$fsize = filesize($fnam);
if($fsize>0)
$str = fread($file,$fsize);
fclose($file);
}else{
$file = fopen($fname,"wb+");
fwrite($file,$str);
fclose($file);
}
urlencode($str);
$arrRule = json_decode($str);