关于json数据格式要求是:
1) 并列的数据之间用逗号(”, “)分隔。
2) 映射用冒号(”: “)表示。
3) 并列数据的集合(数组)用方括号(“[]”)表示。
4) 映射的集合(对象)用大括号(”{}”)表示。
然后利用php构造了一个json格式的数据:
{“err”:0,”msg”:”选择正确!”,”answer”:”B,C,D”,”points”:”11,历史 10,哲学 “,”analysis”:”解析1<br/>解析2″}
从上述规则检测这个格式是正确的,不过通过 jQuery的post函数去获取这个数据却不能解析出来。
直接在写javascript脚本验证这个数据:
<script>
x = {“err”:0,”msg”:”选择错误!”,”answer”:”B,C,D”,”points”:”11,历史 10,哲学 “,”analysis”:”解析1<br/>解析2″};
document.write(‘<pre>’);
document.writeln(x.err);
document.writeln(x.msg);
document.writeln(x.answer);
document.writeln(x.points);
document.writeln(x.analysis);
document.write(‘</pre>’);
</script>
可以正确输出。
any-Unicode-character-
except-“-or-\-or-
control-character
\”
\\
\/
\b
\f
\n
\r
\t
\u four-hex-digits
就是说,任何Unicode字符都可以做值,但有些是例外的必须转义:” 和 \ 和 部分控制字符。
看来 jQuery 对json数据格式控制较严格。根据这些情况,采用以下办法解决了这个问题。
方法一、使用PHP的json_ecode函数输出json数据,由它进行格式化。由于json_encode只支持utf编码,而当前代码页为GBK,所以做转码处理
$x1 = array();
$x1[‘err’] = 0;
$x1[‘msg’] = iconv(“GBK”,”UTF-8″,”选择错误!”);
$x1[‘answer’] = iconv(“GBK”,”UTF-8″,”B,C,D”);
$x1[‘points’] = iconv(“GBK”,”UTF-8″,”11,历史 10,哲学 “);
$x1[‘analysis’] = iconv(“GBK”,”UTF-8″,”analysis”:”解析1<br/>解析2″);
echo json_encode($x1);
方法二、自己写个转义函数
function tojsonvalue($s){
return str_replace(
array(‘”‘, ‘\\’, ‘/’, chr(8),chr(12),chr(10),chr(13),chr(9)),
array(‘\\”‘,’\\\\’,’\\/’,’\\b’,’\\f’,’\\n’,’\\r’,’\\t’),
$s);
}
使用它过滤json格式中的字符值即可解决问题