jQuery:JSON.parse不';不适用于长JSON字符串
我正在从服务器下载一个大文本文件到phonegap应用程序。文本是字符串形式的有效JSON。我将文本数据写入设备的文件系统,然后稍后读取。我使用filereader获取文本数据,这似乎工作正常。当我解析字符串JSON时,问题就出现了 当我下载一个包含2500个元素的文本文件(从数据库返回并以json格式返回的记录)时,json.parse(stringJSON)函数工作正常并返回一个json对象,但是如果我将从服务器返回的元素数增加到3000,则没有得到响应,json输出似乎格式正确。这看起来像是内存问题,JSON数据最多为1.5MB,使用jquery的JSON.parse和phonegap解析太多了。我查看了页面,并尝试包含parse_json而不是json.parse,但它仍然没有返回任何内容(我在页面中包含了相关脚本) 然后,在所有文件读取器回调之后:jQuery:JSON.parse不';不适用于长JSON字符串,jquery,json,cordova,Jquery,Json,Cordova,我正在从服务器下载一个大文本文件到phonegap应用程序。文本是字符串形式的有效JSON。我将文本数据写入设备的文件系统,然后稍后读取。我使用filereader获取文本数据,这似乎工作正常。当我解析字符串JSON时,问题就出现了 当我下载一个包含2500个元素的文本文件(从数据库返回并以json格式返回的记录)时,json.parse(stringJSON)函数工作正常并返回一个json对象,但是如果我将从服务器返回的元素数增加到3000,则没有得到响应,json输出似乎格式正确。这看起来像
function readAsText_READ(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
alert('loaded');//this fires, so filereader is working
//alert(evt.target.result);//this alerts even with a large string
//var parseTarget = JSON.parse(evt.target.result);//works for smaller strings fails with larger strings
console.log('parsing now...');
var parseTarget = json_parse(evt.target.result);//same result as JSON.parse
console.log(parseTarget);
//var parseTarget = $.parseJSON( evt.target.result );
//var parseTarget = eval( "("+evt.target.result+")" );
//alert(parseTarget);
alert(parseTarget["879"]);
};
reader.readAsText(file);
//reader.readAsDataURL(file)
alert('reading file: '+file);
}
*编辑
在phonegap的weinre调试器中,当我尝试读取大json字符串时,我得到了以下结果
parsing...
processMessage failed: Message: S01 File1238321490
s{"really long json... jsonetc..."}
processMessage failed: Error: [object Object]
processMessage failed: Stack: undefined
我不太清楚这些错误消息的意思,我将尝试找出
任何帮助都将不胜感激。仅作为结束语:
我缩小了要下载的文件的大小,愚蠢的是我忘记了将从服务器发送到移动应用程序的内容转义,所以它接收到的是无效的JSON。这是很难发现的,因为JSON中的前几千个条目是有效的,后面的字符串中有一些恶意的双引号
我从服务器中转义了内容,并轻松地解析了300kb文件中的JSON。我很确定1MB的文件也可以正常工作。仅作为结束语:
我缩小了要下载的文件的大小,愚蠢的是我忘记了将从服务器发送到移动应用程序的内容转义,所以它接收到的是无效的JSON。这是很难发现的,因为JSON中的前几千个条目是有效的,后面的字符串中有一些恶意的双引号
我从服务器中转义了内容,并轻松地解析了300kb文件中的JSON。我很确定1MB文件也可以正常工作。如果不显示错误消息,很难猜测。对不起,我已经用从weinre控制台获得的输出编辑了我的问题,不确定它有多大帮助。您应该捕获由
json_parse
引发的错误,例如使用try{var parseTarget=json_parse(evt.target.result);}catch(e){console.dir(e)}
查看是否是解析器及其显示的消息。我尝试了try-catch,得到了完全相同的错误消息,没有向控制台输出额外的错误,因此我猜这意味着json_-parse没有问题?如果前面没有代码,就很难判断。如果调用json_-parse
不会抛出错误错误,那么问题似乎在其他地方。您的console.log(parseTarget)是否可能
fail?如果不显示错误消息,很难猜测。对不起,我用从weinre控制台获得的输出编辑了我的问题,不确定它有多大帮助。您应该捕获由json_parse引发的错误,例如,使用尝试{var parseTarget=json_parse(evt.target.result);}catch(e){console.dir(e)}
查看是否是解析器及其显示的消息。我尝试了try-catch,得到了完全相同的错误消息,没有向控制台输出额外的错误,因此我猜这意味着json_-parse没有问题?如果前面没有代码,就很难判断。如果调用json_-parse
不会抛出错误错误,那么问题似乎在其他地方。您的console.log(parseTarget);
是否可能失败?
parsing...
processMessage failed: Message: S01 File1238321490
s{"really long json... jsonetc..."}
processMessage failed: Error: [object Object]
processMessage failed: Stack: undefined