ECMA 262 Edition5 中提供了原生的JSON支持,其中JSON.parse用来将字符串转成成json,见ECMA 262 Edition5 15.12.2。另见:字符串转换成json的三种方式
IE8/Firefox3.5+/Chrome4/Safari4/Opera10 已实现该方法。使用方式很简单:
var str = '{"name":"jack"}';
var json = JSON.parse(str);
alert(json.name);
在以上实现该方法的浏览器中都会弹出“jack”。
如果给Object.prototype添加一个解析json的方法(某人可能会强烈反对这么干污染了原生对象,这里纯粹为了讨论)
Object.prototype.parseJSON = function () {
return JSON.parse(this);
}
因为所有的对象都继承了Object的方法,这时候可以直接这么用了,
var str = '{"name":"jack"}';
var json = str.parseJSON();
alert(json.name);
str.parseJSON()时,parseJSON内部的this就指向了str。这时候并非所有浏览器都能解析成功。
IE8/Firefox/Safari/Opera仍然会弹出“jack”,Chrome中则报错了:Uncaught illegal access。
为什么这样写Chrome就不支持呢?比较两种方式,传给JSON.parse的参数一个是字符串str,一个是this。貌似这两个没区别?
当str.parseJSON()时,parseJSON内部的this指向了应该就是str。修改下parseJSON方法:
Object.prototype.parseJSON = function () {
alert(typeof this);
return JSON.parse(this);
};
重新执行,可以发现parseJSON弹出的是object,可能这就是区别了。直接new一个字符串就能看到明显的效果了
var js = JSON.parse(new String('{"name":"jack"}'));
alert(js.name);
以上代码除Chrome报错外,其它浏览器均执行正常。
基本得出结论:
Chrome中,JSON.parse的第一个参数只能是字符串,不能是对象(包括new String方式也不支持)
再回到上面给Object.prototype添加一个解析json的方法,如果要兼容所有浏览器,可以这么写:
Object.prototype.parseJSON = function () {
return JSON.parse(this.toString());
}
var str = '{"name":"jack"}';
var json = str.parseJSON();
alert(json.name);
2010-10-09 : 该BUG在Chrome6中已经修复.
分享到:
相关推荐
//jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2>浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: 代码如下: JSON.parse(jsonstr); //可以将json字符串转换成json...
在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。 JSON.stringify(obj)将JSON转为字符串。 JSON.parse(string)将字符串转为JSON格式; 上面的转换可以这么写...
我们平时经常会用到JSON 对象,比如当我们要实现对象的深拷贝时,我们可以用JSON 对象的JSON.stringify和JSON.parse 来拷贝一个完全一样的对象,而不会对原对象产生任何引用关系。在使用localStorage 时,也会用到它...
在Chrome中-检查-应用程序-存储-本地存储 只需将数据保存到字符串 但是,我们可以使用一种称为JSON.stringyfy的方法 localStorage.getItem('allMonths'); const monthsArray = JSON.parse(months); console....
web-rtmp-streamer本项目使用js+swf实现了一个rtmp推流器。...解决了原版使用JSON.parse()前没判断类型导致推流失败的bug。剥离原版各种http请求(如心跳接口、获取网易云cdn地址等),实现纯净无监控推流器。
” Firefox:“ SyntaxError:JSON.parse:JSON数据的第1行第1列出现意外字符” IE:“ SyntaxError:无效字符”修复return_url(Paybox IPN) IPN网址现在默认为您的网站主网址。 因此不需要/ autoresponse页面
当接收application/json ,它不能在IE7或以下版本中使用,因为不支持JSON.parse 。 如果这是,则使用类似Douglas Crockford的东西。 其他一切似乎都起作用。例子使用它再简单不过了: var fajax = require('fajax')...
前提浏览器需要支持HTML5,还需要支持JSON.stringify和JSON.parse方法。 其中应包括IE 11 +,Firefox 36 +,Chrome 40 +,Opera 27+和其他现代浏览器。 入门打开index.html并单击“开始游戏”以使用
例如,没有Mac的iOS上的Chrome 用法 parse(object:Object, [depth:Int]):Object 例子 import { parse } from 'dom-event-to-json' element . addEventListener ( 'click' , ( event ) => { fetch ( '/debug' , {...
self.failed = root.getAttribute('failed') self.skipped = root.getAttribute('skipped') #构建的次数统计在json⽂件中 file = open(REPORT_URL_FILE,'r') self.reportUrl=json.load(file)['reportUrl'] #发送报告...
from urllib.parse import quote_plus import re import json import itertools import sys import requests from queue import Queue from threading import Thread URL_BASE = '...
steamdb-js 一个库,以获取信息,所有地区的价格以及游戏的屏幕截图作为JSON数据安装npm i --save steamdb-js或者,如果您使用的是毛线: yarn add steamdb-js用法/示例(CommonJS): const { Game } = require ( ...
Not able to use JSON.stringify to parse them to String. update: 11/21/2014 1. fix bug of get short name of entries 2. update layout for help doc update: 11/09/2014 1. fix bug of no response for tab ...
objjQuery.parseJSON( str ) Data functions $.clearQueue( [name] ) $.dequeue( [name] ), jQuery.dequeue( [name] ) objjQuery.data( element, key ), jQuery.data( ) obj.data( ), .data( key ) $.data( key, val...
parseJSON() stringifyJSON() 某些代码可能是用ES6编写的,可能需要进行编译才能进行测试。 要求 在Chrome chrome://flags/#enable-javascript-harmony.上启用了ES6 chrome://flags/#enable-javascript-...
与Chrome一样快,简单却可扩展。 它是基于Ruby高级Web爬网框架,用于从网站中提取所需的数据。 它可以用于各种场景,例如数据挖掘,监视或历史档案。 对于自动化测试,我们建议使用 。 感谢Evrone。 阅读有关...