JavaScript JSON

来源:互联网 发布:淘宝花呗分期额度不够 编辑:程序博客网 时间:2024/05/20 18:45

JSON

全称JavaScript Object Notation

轻量(相较于xml

用于数据交换的文本格式

JavaScript标准库中的原生格式,因此不需要特殊的API或者包

包含在数组或对象中的值,值的格式:

1.       简单值

a)       Boolean

b)       null ( undefined, infinity, -infinity, NaN)

c)        number

d)        字符串

2.       复合值

a)        数组

b)       Object对象

Note:(根据浏览器不同,会有不同处理和影响,经测试在firefox下是可以的)

a)      最后一个成员的后面,最好不要加逗号’,’

b)      数组或对象中的字符串最好使用双引号,而不是单引号

c)       value最好由十进制表示

 

JSON验证程式JSLint

 

 

如果回应是JSONP格式,而不是JSON格式,那么

 

Var fixedResponse = response.responseText.replace(/\\’/g,”’”);

Var jsonObj = JSON.parse(fixedResponse); 

JSON.parse

JSON.parseJSON格式的字符串转换还原序列化为JSON对象

 

JSON_DATA = ‘{“data1”: “hello”, “data2”: “world”}’;

JSON.parse(JSON_DATA, reviver);

eval(“(“ + JSON_DATA + “)”);

//eval()的目的在于迫使eval在处理JavaScript代码时候将括号内的表达式JSON_DATA转为对象,而不是作为statement来执行

//不加“(”“)”会出错

 Note:

eval来解析执行第三方的JSON数据可能比较危险(其中可能包含恶意代码)

JSON.parse方法解析字符串本身,该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。

http://msdn.microsoft.com/zh-tw/library/ie/cc836466(v=vs.94).aspx

 

reviver

可选。一个转换结果的函数。将为对象的每个成员调用此函数。如果成员包含嵌套对象,则先于父对象转换嵌套对象。对于每个成员,会发生以下情况:

如果 reviver 返回一个有效值,则成员值将替换为转换后的值。

如果 reviver 返回它接收的相同值,则不修改成员值。

如果 reviver 返回 null undefined,则删除成员

Reviver一般用来将以JSON表示的轨迹ISO日期字符串转换为UTC格式的Date

JSON.stringify

JavaScript值序列化为JSON文字

JSON.stringify(value[, replacer][, space]])

 

Value是要转换的JavaScript值,通常是Object或者Array

Replacer是用来转换成果的函数或者数组,递归处理的

1.       如果是函数,JSON.stringify会呼叫函数,并传入每个成员的索引键和值,并使用传回值而不是原始值,如果传回的是undefined,则表示已经排除这个成员,索引键是空字串“”

2.       如果是Array,那么只会转换阵列中有索引键值的成员,转换顺序与索引键的顺序相同

Space加入缩排,空白,分行符号,使JSON文字更加易读

1.       如果space是数字,那么使用num的空白进行缩排

2.       如果是’\t’,则使用该字串中的字元进行缩排

3.       如果长度超过10个字元的字串,就只会使用前10个字元

Note

如果valuetoJSON方法,则JSON.stringify会返回使用该方法的返回值。如果是undefined,则不转换该值。

 

toJSON方法由JSON.stringify()使用,JSON.stringify会将JavaScript值序列化为JSON文字,如果toJSON方法提过给JSON.stringify,那么呼叫JSON.stringify时也会呼叫toJSON方法

Data对象有内建成员toJSON方法,将UTC转为ISO格式字串

可以重写或新定义ObjecttoJSON方法,以便在JSON序列化之前转为特定的类型。

 

举例 

var arr = ['a','b'];

var str = JSON.stringify(arr);

var newArr = JSON.parse(str);

console.log(str);

console.log(newArr.pop());

 

var o = new Object();

o.name = "Emma";

o.Age = 25;

o.grade = 89;

 

o.toJSON = function(){

  var obj = {};

  for(var key in this){

    if(typeof this[key] === 'string'){

        obj[key] = this[key].toUpperCase()

    }else{

      obj[key] = this[key];

    }

  }

  return obj;

};

console.log(JSON.stringify(o, toGrade, '\t'));

      

function toGrade(key, value)

{

  if(typeof value != 'number')  return value;

  if(value>80 && value < 90)  return "B";

  if(value > 90)    return "A";

  if(value < 80)    return "low";

}

 

/*

["a","b"]

b

 

{

     "name": "EMMA",

     "Age": "low",

     "grade": "B"

}

*/

0 0