JSON使用与类型转换

  • JSON语法与对象
  • JSON方法与使用

 一、JSON语法与对象

JSON是英文JavaScript Object Notation(JavaScript 对象表示法)的缩写,是存储和交换文本信息的语法。类似XML,JSON比XML更小更快更简单。

JSON对象采用键值对的结构,所以在JS对象中Object和Array就是JSON对象,Array的索引作为键。但是在JSON的值不能是Function,如果JSON对象中存在Function在被转换成JSON文本的时候会删除该键值对。Date对象也不能以Date的对象形式存在JSON文本中,JSON对象在被转换成JSON文本时会被隐式进行String()转换操作。

正常情况下JSON的值可以是:字符串, 数字, 对象, 数组, 布尔值或 null。

----JSON对象与转换:

var arr = [1,"a",true,{o:"0"}];
console.log(JSON.stringify(arr));//'[1,"a",true,{"o":"0"}]'

 二、JSON方法与使用

  • JSON.parse(jsoStr)
  • JSON.stringify(jsoObj)

 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8),所以需要兼容处理:

var jsoStr = '[1,"a",true,{"o":"0"}]'
var json1 = eval("(" + jsonStr + ")");
var json2 = (new Function("return " + jsonStr))();

eval()方法的应用就不具体描述了,相信大家都懂,我们直接来看json2的实现原理:

new Function()本质上就是用来实例化方法的构造函数,其参数以字符串的形式传入,会被解析为实例化方法的内部代码。所以在前面加上“return ”实质上就实现了JSON对象返回的语句,然后再通过立即执行函数实现了将JSON文本转换成JSON对象的效果。

(function anonymous() {
     return [1,"a",true,{"o":"0"}]
})

anonymous就是new Function()内部实例化的方法。

至于JSON.parse()的兼容方法根据我之前的类型转换博客封装就好了,主要注意function和Date对象的转换:类型和原生函数及类型转换(三:终结js类型转换)

原文地址:https://www.cnblogs.com/ZheOneAndOnly/p/10631016.html