现在的位置: 首页 > 综合 > 正文

什么是JSON

2012年09月14日 ⁄ 综合 ⁄ 共 2090字 ⁄ 字号 评论关闭

“JSON”就是一种可以用于替代“XML”的轻量级数据交换格式。 
什么是json:
“JSON”的全称是“JavaScript Object Notation”,即JavaScript对象符号,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。其基于ECMA262语言规范(1999-12第三版)中JavaScript编程语言的一个子集。JSON采用与编程语言无关的文本格式,但是也使用了类C语言(包括C、C++、C#、Java、JavaScript、Python等)的习惯,这些特性使JSON成为理想的数据交换格式。

JSON建构于两种结构:
(1)“名称/值”对的集合。不同的语言中,其被理解为对象(“object”)、纪录(“record”)、结构(“struct”)、字典(“dictionary”)、哈希表(“hash table”)、有键列表(“keyed list”)或者关联数组(“associative array”)。
(2)值的有序列表。在大部分语言中,其被理解为数组(“array”)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

json的基本格式
 

不同类型的变量转换为“JSON”格式的方式稍有不同。
(1)将数值型、布尔型变量和函数对象转换为“JSON”格式非常简单,不需要做任何处理,
(2)将字符串型变量转换为“JSON”格式时,需要先处理其中的某些特殊字符。例如双引号、单引号和回车、换行符,将其替换为反斜杠“"”转义后的字符,然后用引号将转换后的内容括起来。代码如下:
return(""""+obj.replace(/(["""'])/g,"""$1").replace(/"r/,"""r").replace(/"n/,"""n").replace(/"t/,"""t")+"""");
(3)将日期时间型变量转换为“JSON”格式时,需要将其进行特殊处理,代码如下:
return("(new Date("""+obj.toUTCString()+"""))");
(4)将正则表达式转换为“JSON”格式时,通过此对象的“source”获取其内容。不仅仅需要处理“source”中的特殊字符,还需要注意设置其“global”,“ignoreCase”和“multiline”属性,代码如下:
return("(new RegExp("""+String(obj.source).replace(/("W)/g,"""$1")+""", """+(obj.global?"g":"")+(obj.ignoreCase?"i":"")+(obj.multiline?"m":"")+"""))");
(5)将数组对象转换为“JSON”格式时,递归调用“toJSONString”函数依次序列化其中的每个元素,然后将获得的各个字符串用逗号连接,在最外围用方括号“[]”将其括起来,代码如下:
var re = new Array();
for(var i=0; i<obj.length; i++)re.push(toJSONString(obj[i]));
return("[" + re.join(", ") + "]");
(6)将“Object”对象转换为“JSON”格式时,做法与数组对象类似,同样需要通过递归调用来依次处理其中的每个组成元素。此外,需要注意的是,其组成元素序列化时,需要构成名值对的形式。
re = new Array();
for(var i in obj)re.push(indent + ""t" + toJSONString(i, ""t" + indent) + ": " + toJSONString(obj[i], ""t" + indent));
return("{"r"n" + re.join(","r"n") + ""r"n" + indent + "}");


json的缺点

 

对于“JSON”,首先要明白“JSON”和“XML”一样也是一种简单文本格式。相对于“XML”,其更加易读、更便于肉眼检查。在语法的层面上,“JSON”与其他格式的区别是在于分隔数据的字符,“JSON”中的分隔符主要限于单引号、小括号、中括号、大括号、冒号和逗号。例如下面的“JSON”数据:
{
    "name": "hutia",
    "age": 26,
    "male": true,
    "laugh": function(){ alert("I am laughing."); },
    "createDate": (new Date("Mon, 2 Jun 2008 15:11:04 UTC")),
    "isScriptBlock": (new RegExp(""<script"."*"?"<"""/script">", "gi")),
    "lover": {
        "name": "axiang",
        "male": false,
        "age": 22
    }
}

 

抱歉!评论已关闭.