最近有很多的JS的东西要写,所以,其中很多的关于Json的操作。其中有很多我们平时经常会使用的操作,把它记录一下,以后如果忘记某个方法也好找一点。
一,Json的简单概述
1,JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。这样就使得人们很容易进行阅读和编写,同时方便解析和生成。
同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。
JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
这些特性使JSON成为理想的数据交换语言。
2,JSON基于两种结构
* 名称/值”对的集合(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
* 值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)。
同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。
JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。
这些特性使JSON成为理想的数据交换语言。
2,JSON基于两种结构
* 名称/值”对的集合(A collection of name/value pairs)。不同的编程语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
* 值的有序列表(An ordered list of values)。在大部分语言中,它被实现为数组(array),矢量(vector),列表(list),序列(sequence)。
二,JS中对JSON的操作
1,JavaScript是一种通用的编程语言,JSON可以说是JavaScript对象文字符号的一个子集,由于JSON是JavaScript的一个子集,所以它可以自如的在JavaScript中使用。
1)创建对象
var myJSONObj={
"info":[
{"mobile":"XXX"},
{"name":"XXX"},
{"email":"xxxx"}
]
};
or
var myJSONObj={};
myJSONObj['key']=value;
2)创建数组
var jsonArr=[];
var item1={"id":"1001","name":"larry"};
var item2={"id":"1002","name":"jerry"};
jsonArr.push(item1);
jsonArr.push(item2);
要将 JSON 字符串转换成一个对象, 我们可以用 eval() 函数. eval() 会触发JavaScript的编译器.
因为JSON是JavaScript的一个真子集, 编译器会正确的解析字符串内容, 同时生成一个对象结构. 字符串必须用括号括起来, 以免产生JavaScript语法歧义.
var myJSONObj=eval('('+myJSONText+')‘)
eval 函数速度很快. 它可以编译和执行任何JavaScript代码, 这里可能存在安全问题. 当源是可信的并且完整的时候, 可以使用 eval.
而用JSON解析器是更安全的方式. 在使用XMLHttpRequest的Web程序中, 只允许在同源的情况下通信, 因此它是可信的. 但它不一定是完整的.
如果服务器用的不是严谨的JSON编码, 或者它没有严格检查所有输入内容, 它也可以提供无效的JSON, 同时带上危险的脚本.
此时, eval 将会执行该脚本, 产生危害.
为了解决这个问题,应该使用JSON解析器,JSON解析器只会识别JSON文本, 拒绝所有脚本,提高了安全性。
var myObject = JSON.parse(myJSONtext[, reviver]);
reviver:可选
如果是一个函数,则规定了原始值如何被解析改造,在被返回之前
举个栗子:
JSON.parse('{"p": 5}', function (k, v) {
if(k === '') return v; // 如果到了最顶层,则直接返回属性值,
return v * 2; // 否则将属性值变为原来的 2 倍。
});
4,JSON字符串化是一个反过来的动作, 它将JavaScript的数据结构转化成JSON字符串. JSON不支持循环的数据结构, 因此在用JSON字符串化的时候, 不要给它循环引用的结构.
var myJSONText = JSON.stringify(myObject, replacer);
如果 stringify 方法发现对象包含了一个 toJSON 的方法, 它会调用这个方法, 然后将返回的结果字符串化. 这允许对象自己定义它们的JSON表示方式.
字符串化方法还可以使用一个可选的 replacer 函数, 这个函数将会在结构中的每个值的 toJSON 方法(如果存在的话) 后调用. 它将接收每个key和value作为它的参数. 这会被绑定在包含key的对象中.
举个栗子:
function replacer(key, value) {
if (typeof value === 'number' && !isFinite(value)) {
return String(value);
}
return value;
}