JSON.parse 和 JSON.stringify
2017-04-28 23:37
716 查看
现代浏览器提供的JSON.parse(JQ使用)
if ( datatype === "json" || !datatype && rhd.indexOf("json") >= 0 ) {
data = anyjs.trim( data );
//use the native JSON parser first
return window.JSON && window.JSON.parse ?window.JSON.parse(data):(new Function("return " + data))();
}
初学JSON,按照官方说明,在json2.js中有parse和stringify两个方法,parse用于从一个字符串中解析出json对象。还是举个例子说明:
1 varstr = " {'name':'x', 'age':23}" ;
2 JSON.parse(str);
原来认为这肯定能够正确执行的,但是无论怎样写这个对象string,都抛出异常。后来发现原来是 " 和 ' 导致的错误。如果改为:
1 var str = '{ " name " :" xskow " , "age " : 23 }';
2 JSON.parse(str);
就OK了!
还有就是我们写对象的时候一般可以{name:'xskow'},即属性名可以不用双引号括起来,但如果使用JSON.parse的话,每个属性都必须用双引号括起来,否则也会抛出异常。
比如,如下的代码:
浏览器会报,invalid label错, 这是因为, eval会尝试将你的response解释为一个label, 当你在脚本中直接写:
会报错的原理是一样的.
解决办法有俩个:
或者
JSON.parse 函数将JSON文本转换为对象。
JSON.parse(text[, reviver])参数text
必选项。要转换为对象的JSON文本。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。JSON.stringify 函数将对象转换为JSON文本。
JSON.stringify(value[, reviver[, space]])参数text
必选项。要转换为JSON文本的对象。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
space
可选项。格式化输出JSON文本缩进的空格数量。如果不提供该参数将不会格式化输出。参数reviver的委托类型reviver(key, value)
reviver函数的中的this是当前所遍历到的节点的父节点。当所遍历的是根节点的时候,父节点是个Object对象,根节点是该对象的一个属性,属性名是空字符串。
参数key
当父节点是数组Object,key为数组索引,否则key为Object属性名。
value
节点值。
注:JSON不支持循环数据结构。
if ( datatype === "json" || !datatype && rhd.indexOf("json") >= 0 ) {
data = anyjs.trim( data );
//use the native JSON parser first
return window.JSON && window.JSON.parse ?window.JSON.parse(data):(new Function("return " + data))();
}
初学JSON,按照官方说明,在json2.js中有parse和stringify两个方法,parse用于从一个字符串中解析出json对象。还是举个例子说明:
1 varstr = " {'name':'x', 'age':23}" ;
2 JSON.parse(str);
原来认为这肯定能够正确执行的,但是无论怎样写这个对象string,都抛出异常。后来发现原来是 " 和 ' 导致的错误。如果改为:
1 var str = '{ " name " :" xskow " , "age " : 23 }';
2 JSON.parse(str);
就OK了!
还有就是我们写对象的时候一般可以{name:'xskow'},即属性名可以不用双引号括起来,但如果使用JSON.parse的话,每个属性都必须用双引号括起来,否则也会抛出异常。
比如,如下的代码:
function handle_success(response){ var json = eval(response); // response = "{'foo' : 'bar'}"; }
浏览器会报,invalid label错, 这是因为, eval会尝试将你的response解释为一个label, 当你在脚本中直接写:
<script> {'foo' : 'bar'};</script>
会报错的原理是一样的.
解决办法有俩个:
var json = eval('(' + response + ')'); // response = "{'foo' : 'bar'}";
或者
eval('var json = ' + response); // response = "{'foo' : 'bar'}"; //json is available now
JSON.parse 函数将JSON文本转换为对象。
JSON.parse(text[, reviver])参数text
必选项。要转换为对象的JSON文本。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。JSON.stringify 函数将对象转换为JSON文本。
JSON.stringify(value[, reviver[, space]])参数text
必选项。要转换为JSON文本的对象。
reviver
可选项。该参数是个替换函数。在转换中,遍历的每个节点,都将执行该函数,该函数的返回值将替代转换结果的相应节点值。
space
可选项。格式化输出JSON文本缩进的空格数量。如果不提供该参数将不会格式化输出。参数reviver的委托类型reviver(key, value)
reviver函数的中的this是当前所遍历到的节点的父节点。当所遍历的是根节点的时候,父节点是个Object对象,根节点是该对象的一个属性,属性名是空字符串。
参数key
当父节点是数组Object,key为数组索引,否则key为Object属性名。
value
节点值。
注:JSON不支持循环数据结构。
相关文章推荐
- JSON.parse和JSON.stringify
- JSON.parse 和 JSON.stringify
- JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
- JSON.stringify() 和 JSON.parse()
- JSON之stringify()、parse()
- JSON对象的stringify()和parse()方法
- javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())
- 在IE6/7中兼容JSON.parse和JSON.stringify
- js中JSON.parse()、JSON.stringify()以及$.param()用法小结
- json.stringify和json.parse,序列化和反序列化
- JSON.stringify和JSON.parse
- JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
- Jquery中json对象 函数parse()stringify()
- JSON.stringify && JSON.parse
- javascript JSON parse stringify 注意!
- JSON.stringify()与JSON.parse()
- JSON.stringify&JSON.parse、表单序列化
- JSON.stringify、JSON.parse、表单序列化
- JSON.parse, JSON.stringify and eval
- jquey 92 json.parse json.stringify