码迷,mamicode.com
首页 > Web开发 > 详细

JSON小结

时间:2015-06-12 13:14:24      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

 

在 JSON 中,“Object” 是什么呢? json.org 有很好的解释:

1 、An object is an unordered set of name/value pairs.
2、An object begins with { (left brace) and ends with } (right brace).
3、Each name is followed by : (colon) and the name/value pairs are separated by , (comma).

简单来说,在 JSON 中,Object 不是你认为的 bigNumber、text 之类的程序语言层面的具体类型,而是指满足上面三个条件的“字符串”。

JSON is built on two structures:

  • A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
  • An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.

These are universal data structures. Virtually all modern programming languages support them in one form or another. It makes sense that a data format that is interchangeable with programming languages also be based on these structures.

 

http://json.org/

 

1、JSON 是一种通用数据传输协议,所以 JSON 只需要覆盖所有可能的数据类型,足够表达数值信息就ok了
2、JSON 不是对象传输协议,所以对象具备的方法、读写器、事件这些与具体实现有关的特性就不应该加入协议中,否则,虽然是提高了JSON表达能力,但是却降低了通用性
3、JSON 重要原则就是简单性,所以,不会考虑楼主所说的情况的

 

 

当一个面试官问你: JSON都支持什么对象/类型?你怎么回答?

也许他的本意是下面这个答案:

JSON格式支持的数据类型有以下:

类型描述
Number 在JavaScript中的双精度浮点格式
String 双引号的反斜杠转义的Unicode
Boolean true 或 false
Array 值的有序序列
Value 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等
Object 无序集合键值对
Whitespace 可以使用任何一对中的令牌
null empty
 

但我还真不这么认为,我认为支持任意对象类型,只要是接收容器里面存在的就可以。

可以使用下面的示例来证明:

 

技术分享
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<script src="../resources/js/jquery-1.8.3.min.js"></script>
</head>
<body></body>
</html>
<script>
    function ClassA(sColor) {
        this.color = sColor;
        this.sayColor = function() {
            alert(this.color);
        };
    }

    function strToJson(str) {
        var json = eval((+ str + ));
        return json;
    }

    jQuery.ajax({
        type : "get",
        cache : false,
        dataType : "text",
        url : "simple.json",
        success : function(data) {
            alert(data);
            var _json = strToJson(data);
            _json.testcolor.sayColor(); // 这里是我们想看的效果
        },
        error : function() {
            alert(对不起,服务请求异常!);
        }
    }); 
</script>
技术分享

 

 

simple.json文件内容:

 

技术分享
{
    "retCode": "0000",
    "retMsg": "Success",
    "testcolor": new ClassA("red"),
    "retList": {
        "le1": {
            "price": "4800000",
            "commId": "56761"
        },
        "le2": {
            "price": "4800000",
            "commId": "56761"
        }
    }
}
技术分享

 

注意上面代码里面的 dataType : "text"

因为Jquery源码里面是用下面的方式转换的,我们需要更加原始的方式,所以我替换成了自定义的strToJson(str)

Jquery源码:

技术分享
    // Evaluates a script in a global context
    // Workarounds based on findings by Jim Driscoll
    // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
    globalEval: function( data ) {
        if ( data && core_rnotwhite.test( data ) ) {
            // We use execScript on Internet Explorer
            // We use an anonymous function so that context is window
            // rather than jQuery in Firefox
            ( window.execScript || function( data ) {
                window[ "eval" ].call( window, data );
            } )( data );
        }
    },
技术分享

 

其实JSON就是字符串,需要前端进行eval转换,所以不能简单的说json支持什么对象,或者支持什么数据类型。

注意提问方式,需要更加严谨提出我们想要提问的问题。

 

http://www.cnblogs.com/zhoulf/p/4568234.html

 

 

JSON小结

标签:

原文地址:http://www.cnblogs.com/softidea/p/4571419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!