日期:2014-05-17  浏览次数:20752 次

JSON格式问题
项目中有一个通用的类负责将对象转换为JSON字符串以供AJAX调用
之前项目未采用jQuery,一直以JavaScript的eval()来解析JSON字符串
但最近ADMIN模块开始采用jQuery-1.4.2,却发现jQuery.parseJSON解析不了之前的字符串
以eval()解析时,JSON字符串必须以括号括起来
而以jQuery.parseJSON解析时最外层不能有括号


请问JSON的标准写法要不要带括号?
个人理解应该是不需要带括号吧,为什么eval()解析时必须带?(而且各浏览器表现一致)


HTML code

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>Test</title>
        <script type="text/javascript" src="jquery-1.4.2.js"></script>
        <script type="text/javascript">
            $(function() {
                var txt1 = "({\"list\":[{\"id\":\"1000000001\", \"name\":\"Stephen\"},{\"id\":\"1000000002\", \"name\":\"Clare\"}], \"returnCode\":\"000000\", \"message\":\"成功\"})";
                try {
                    var json = eval(txt1);
                    $("#msg").append("<p>eval解析带括号Json成功:"+json.returnCode+"</p>");
                } catch(e) {
                    $("#msg").append("<p>eval解析带括号Json出错</p>");
                }
                try {
                    var json = $.parseJSON(txt1);
                    $("#msg").append("<p>jQuery解析带括号Json成功:"+json.returnCode+"</p>");
                } catch(e) {
                    $("#msg").append("<p>jQuery解析带括号Json出错</p>");
                }

                var txt2 = "{\"list\":[{\"id\":\"1000000001\", \"name\":\"Stephen\"},{\"id\":\"1000000002\", \"name\":\"Clare\"}], \"returnCode\":\"000000\", \"message\":\"成功\"}";
                try {
                    var json = eval(txt2);
                    $("#msg").append("<p>eval解析不带括号Json成功:"+json.returnCode+"</p>");
                } catch(e) {
                    $("#msg").append("<p>eval解析不带括号Json出错</p>");
                }
                try {
                    var json = $.parseJSON(txt2);
                    $("#msg").append("<p>jQuery解析不带括号Json成功:"+json.returnCode+"</p>");
                } catch(e) {
                    $("#msg").append("<p>jQuery解析不带括号Json出错</p>");
                }
            });
        </script>
    </head>

    <body>
        <div id="msg"></div>
    </body>
</html>



------解决方案--------------------
标准的是要带括号的
------解决方案--------------------
探讨
jQuery1.4之前的版本是通过eval()解析JSON字符串的

------解决方案--------------------
不带小括号的话,JS把JSON的内容当做一个JavaScript对象来处理。 个人理解是这样。因为不带小括号的JSON就是一个JavaScript对象形式(有属性,有值)。
------解决方案--------------------
正准备学习中~
------解决方案--------------------
用单引号嘛。。
------解决方案--------------------
晕死,这个还用问?

那是eval这个函数的问题,和json无关,你应该查eval()而不是去查json!
------解决方案--------------------
学习,没仔细研究过
------解决方案--------------------