Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:JSON.parse不';不适用于长JSON字符串_Jquery_Json_Cordova - Fatal编程技术网

jQuery:JSON.parse不';不适用于长JSON字符串

jQuery:JSON.parse不';不适用于长JSON字符串,jquery,json,cordova,Jquery,Json,Cordova,我正在从服务器下载一个大文本文件到phonegap应用程序。文本是字符串形式的有效JSON。我将文本数据写入设备的文件系统,然后稍后读取。我使用filereader获取文本数据,这似乎工作正常。当我解析字符串JSON时,问题就出现了 当我下载一个包含2500个元素的文本文件(从数据库返回并以json格式返回的记录)时,json.parse(stringJSON)函数工作正常并返回一个json对象,但是如果我将从服务器返回的元素数增加到3000,则没有得到响应,json输出似乎格式正确。这看起来像

我正在从服务器下载一个大文本文件到phonegap应用程序。文本是字符串形式的有效JSON。我将文本数据写入设备的文件系统,然后稍后读取。我使用filereader获取文本数据,这似乎工作正常。当我解析字符串JSON时,问题就出现了

当我下载一个包含2500个元素的文本文件(从数据库返回并以json格式返回的记录)时,json.parse(stringJSON)函数工作正常并返回一个json对象,但是如果我将从服务器返回的元素数增加到3000,则没有得到响应,json输出似乎格式正确。这看起来像是内存问题,JSON数据最多为1.5MB,使用jquery的JSON.parse和phonegap解析太多了。我查看了页面,并尝试包含parse_json而不是json.parse,但它仍然没有返回任何内容(我在页面中包含了相关脚本)

然后,在所有文件读取器回调之后:

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