JS中对JSON的常见操作与处理

       最近有很多的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)。

二,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);

3,JSON转对象
要将 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;
}




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值