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

时间:2013-09-18 10:04:03

标签: jquery json cordova

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

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

var ft = new FileTransfer();

 ft.onprogress = function(progressEvent) {
    if (progressEvent.lengthComputable) {
        var perc = Math.abs(Math.floor((progressEvent.loaded / progressEvent.total) * 100));
        $loading.html(perc + " Loading...")
    } else {
        if($loading.innerHTML == "") {
            $loading.innerHTML = "Loading";
        } else {
            $loading.innerHTML += ".";
        }
    }
};

var dlPath = DATADIR_separate.fullPath + "/"+foldername_separate+".html";
ft.download("http://downloadURL", dlPath, function(){
    alert('saved');
    $loading.hide();
    remove_permanent_overlay();
}, function(){
    alert('fail');
    $loading.hide();
    remove_permanent_overlay();
});

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

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

不太确定这些错误消息是什么意思,我会试着找出......

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

只是为了一些关闭:

我缩小了要下载的文件的大小,愚蠢地我忘了逃避从服务器发送到移动应用程序的内容,因此它收到了无效的JSON。这很难发现,因为JSON中的前几千个条目都是有效的,后面的字符串中有一些流氓双引号。

我从服务器中转义了内容,并轻松地在300kb文件中解析了JSON。我很确定1MB文件也能正常工作。