下载大尺寸json时如何解决Uncaught RangeError

     2023-03-05     64

关键词:

【中文标题】下载大尺寸json时如何解决Uncaught RangeError【英文标题】:How to solve Uncaught RangeError when download large size json 【发布时间】:2017-02-18 22:41:30 【问题描述】:

我正在尝试下载大型 json 数据。 但它导致Uncaught RangeError: Invalid string length

请帮忙解决这个问题,在此先感谢。

这里是 Jsfiddle:http://jsfiddle.net/sLq3F/456/

【问题讨论】:

您正在尝试获取 181 兆字节的文件。 (阅读此问题的人请注意:如果您单击该小提琴链接,请准备好让您的 CPU 风扇旋转。) 是的,有很多数据要在那里进行两次字符串化。该数据对象中的数组有 206560 项。 没有得到足够的重视,因为这里没有问题。有一条错误消息和一个链接。 根据我的说法,您必须从服务器端获取 JSON,而不是从 JQuery 获取。 【参考方案1】:

我猜您需要遍历 JSON 文件中的某些内容并将其拆分为更易于管理的字符串。

汤姆

你有一个示例 sn-p JSON 文件吗?

【讨论】:

【参考方案2】:

你有运行 PHP 的服务器吗?

如果你这样做,我相信你必须绝对检查你的 PHP.ini 文件或运行一个 phpinfo 页面,因为 php 设置确实限制了文件传输的大小,即使它不是外部请求。它可以用其他语言做到这一点,但除了 PHP 之外,我从来没有遇到过这个问题。

附:我没有看到文件的大小

【讨论】:

【参考方案3】:

我认为您的 json 文件是“JSON 太大”的场景之一。你知道,如果 json 文件有这么多的记录(确切地说,根据测试,100000 条记录会使浏览器挂起,而更多的记录则无法在许多浏览器中加载)它不建议使用。

您可以阅读这篇文章了解更多信息:HOW BIG IS TOO BIG FOR JSON?

【讨论】:

【参考方案4】:

您可以使用fetch()Response.body.getReader(),它返回ReadableStreamTextDecoder()Blob()URL.createObjectURL()

注意,在具有有限RAM 或可用磁盘空间不足的设备上,在Save File 对话框中单击Save 后,4:20Save File 对话框关闭之前已经过去了四分二十秒,然后是另外一个在文件管理器 GUI 中从文件中删除 .crdownload 扩展名之前的分 30 秒 1:30。在文件下载到文件系统并且Save File 对话框可见的第一个4:20 期间,鼠标指针是可移动的,尽管UI 暂时对单击或尝试更改选项卡没有响应。当Save File 对话框关闭并且文件仍在下载到文件系统时,扩展名为.crdownload,UI 将恢复正常功能。

在上述过程结束时,文件已成功下载到本地文件系统,总大小为189.8 MB (189,778,220 bytes)

<!DOCTYPE html>
<html>

<head>
  <style>
    code 
      color:navy;
      background-color:#eee;
      padding:2px;
    
  </style>
</head>

<body>
  <button>Request File</button><br>
  <progress min="0" max="189778220" value="0"></progress>
  <output></output>
  <br><br>
  <label></label>
  <script>
    var url = "https://raw.githubusercontent.com/zemirco/sf-city-lots-json/master/citylots.json";
    var button = document.querySelector("button");
    var progress = document.querySelector("progress");
    var label = document.querySelector("label");
    var output = document.querySelector("output");
    
    var request = (url) => 
      
      label.innerHTML = `Requesting <code>$url</code> at $new Date().<br><br>`;
      
      return fetch(url)
      .then(response => response.body.getReader())
      .then(reader => 
        var decoder = new TextDecoder();
        var json = "";
        label.innerHTML += `Request successful.<br><br>Reading request body at $new Date().<br><br>`;
        return reader.read().then(function processData(result) 
            if (result.done) 
              // do stuff when `reader` is `closed`
              return reader.closed.then(function() 
                // return `json` string
                return json;
              );
            ;
            json += decoder.decode(result.value);
            output.innerHTML = ` $json.length of $progress.max bytes read`;
            progress.value = json.length;
            return reader.read().then(processData)
          )
          .then(function(data) 
            var message = `Reading of <code>$url</code> complete at $new Date(). <br><br>` 
                               + `$data.length total bytes read. `
                               + `Please allow up to 4 minutes for file to download `
                               + `to filesystem after clicking <code>Save</code>.<br><br>`;
            label.innerHTML += message;
            
            var blob = new Blob([data], 
              type: "application/json"
            );
            var file = URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.download = "citylots.json";
            a.href = file;
            document.body.appendChild(a);
            a.click();
            var closeBlob = (e) => 
              window.removeEventListener("focus", closeBlob);
              blob.close();
              URL.revokeObjectURL(file);
            ;
            window.addEventListener("focus", closeBlob);
            return message.replace(/<[^>]*>/g, "");
          )
          .catch(function(err) 
            console.log("err", err)
          )
      );
    
    
    var handleRequest = (e) => 
      button.setAttribute("disabled", "disabled");
      request(url).then(function(message) 
        console.log(message);
        button.removeAttribute("disabled");
      )
    ;
    
    button.addEventListener("click", handleRequest);
  </script>
</body>
</html>

plnkrhttps://plnkr.co/edit/gewixzHZSKRXquZ2OVF2?p=preview

【讨论】:

当我点击按钮时,它似乎正在加载,但经过一段时间后它导致 DevTools 与页面断开连接。请帮助我,.. @selvarajmas 单击Save 后,Save File 对话框需要 4 多分钟才能关闭。在文件写入本地文件系统完成之前又过了一分半钟。您试用的设备上有多少RAM 我已安装内存(RAM) 3GB 您在javascript 尝试过哪个浏览器? 哪个版本的chrome?

下载 JSON 时如何解决 UITableView 滚动性能滞后的问题?

】下载JSON时如何解决UITableView滚动性能滞后的问题?【英文标题】:HowdoIfixlaggyUITableViewscrollingperformancewhendownloadingJSON?【发布时间】:2017-05-1418:26:40【问题描述】:在我的应用程序中,我从Internet下载了一个JSON文件,并用该文件... 查看详情

如何使用 tableDragger 解决 Uncaught TypeError?

】如何使用tableDragger解决UncaughtTypeError?【英文标题】:howtoresolveUncaughtTypeErrorusingtableDragger?【发布时间】:2017-12-2722:30:06【问题描述】:我有未捕获的类型错误:tableDragger不是函数当使用tableDraggerjs库时。table-dragger.min.js文件被... 查看详情

如何解决问题:Uncaught (in promise) TypeError: promisify is not a function?

】如何解决问题:Uncaught(inpromise)TypeError:promisifyisnotafunction?【英文标题】:Howtosolvetheproblem:Uncaught(inpromise)TypeError:promisifyisnotafunction?【发布时间】:2020-10-0915:12:54【问题描述】:下面是我的代码。我使用节点v12.16.3和npmv6.14.4。con... 查看详情

在 javascript 中通过 django 模板检索 json 数据时出错,在参数列表后给出 Uncaught SyntaxError: missing )

...pt中通过django模板检索json数据时出错,在参数列表后给出UncaughtSyntaxError:missing)【英文标题】:ErroronretrievingjsondatathroughdjangotemplatesinjavascriptgivesUncaughtSyntaxError:missing)afterargumentlist【发布时间】:2021-05-1514:21:31【问题描述】:我 查看详情

Uncaught (in promise) SyntaxError: Unexpected end of JSON input error

】Uncaught(inpromise)SyntaxError:UnexpectedendofJSONinputerror【英文标题】:【发布时间】:2021-11-0600:54:17【问题描述】:这只是添加到购物车功能。也意味着将字段插入数据库。添加到数据库时一切都很好,但是每次单击添加到购物车时都... 查看详情

Vue如何解决Uncaught SyntaxError: Function statements require a function name

】Vue如何解决UncaughtSyntaxError:Functionstatementsrequireafunctionname【英文标题】:VuehowtosolveUncaughtSyntaxError:Functionstatementsrequireafunctionname【发布时间】:2020-03-0212:11:26【问题描述】:我正在尝试创建一个通过Telegram进行身份验证的简单网... 查看详情

如何解决 Uncaught ReferenceError: bus is not defined? (vue.js 2)

】如何解决UncaughtReferenceError:busisnotdefined?(vue.js2)【英文标题】:HowtosolveUncaughtReferenceError:busisnotdefined?(vue.js2)【发布时间】:2017-07-0609:54:36【问题描述】:我遵循这个教程:https://vuejs.org/v2/guide/components.html#Non-Parent-Child-Co 查看详情

如何解决 index.js:9 Uncaught TypeError:无法读取未定义的属性“setWallpaper”?

】如何解决index.js:9UncaughtTypeError:无法读取未定义的属性“setWallpaper”?【英文标题】:Howtoresolveindex.js:9UncaughtTypeError:Cannotreadproperty\'setWallpaper\'ofundefined?【发布时间】:2020-03-2915:36:14【问题描述】:大家好,我是新来的反应原... 查看详情

如何分发大文件大文件传输解决方案-html5

一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断... 查看详情

Uncaught ReferenceError: CodeMirror 未定义,尽管我已经包含了所有内容。如何美化 textarea 中的 JSON 和 XML

】UncaughtReferenceError:CodeMirror未定义,尽管我已经包含了所有内容。如何美化textarea中的JSON和XML【英文标题】:UncaughtReferenceError:CodeMirrorisnotdefinedalthoughIhaveincludedeverything.HowtobeautifytheJSONandXMLintextarea【发布时间】:2020-10-0522:09:28【... 查看详情

如何读取具有不同数据类型的大型 JSON 文件

...,然后根据一些预定义的json-schemas验证内容,当我针对小尺寸(~1MB)文件进行测试时一切正常,但当我开始读取50MB和更大尺寸的东西开始失败,就像当我到达解 查看详情

如何解决“Uncaught (in promise) TypeError: response.body.forEach is not a function”? (vue.js 2)

】如何解决“Uncaught(inpromise)TypeError:response.body.forEachisnotafunction”?(vue.js2)【英文标题】:Howtosolve"Uncaught(inpromise)TypeError:response.body.forEachisnotafunction"?(vue.js2)【发布时间】:2017-06-2805:41:15【问题描述】:我的组件 查看详情

Python - 读取 JSON 大尺寸数据

】Python-读取JSON大尺寸数据【英文标题】:Python-ReadingJSONlargesizedata【发布时间】:2013-11-2902:27:10【问题描述】:我想在Python/R中读取JSON数据(12GB)。如果我使用json.loads()函数,它会出现内存错误。我对数据一无所知。是否可以... 查看详情

json.parse 给出 Uncaught SyntaxError: Unexpected Token (Django json serialized queryset)

】json.parse给出UncaughtSyntaxError:UnexpectedToken(Djangojsonserializedqueryset)【英文标题】:json.parsegivesUncaughtSyntaxError:UnexpectedToken(Djangojsonserializedqueryset)【发布时间】:2011-11-3018:28:40【问题描述】:我在尝试解析json数据时遇到错误Uncaug 查看详情

如何解决 Uncaught TypeError: this.filters is not a function ? (vue.js 2)

】如何解决UncaughtTypeError:this.filtersisnotafunction?(vue.js2)【英文标题】:HowtosolveUncaughtTypeError:this.filtersisnotafunction?(vue.js2)【发布时间】:2017-07-0505:18:57【问题描述】:我的组件代码是这样的:<script>import_from\'lodash\'exportdefaul 查看详情

Framey API - “Uncaught SyntaxError: Unexpected token :”当我请求 json

】FrameyAPI-“UncaughtSyntaxError:Unexpectedtoken:”当我请求json【英文标题】:FrameyAPI-"UncaughtSyntaxError:Unexpectedtoken:"whenIrequestjson【发布时间】:2012-05-0819:04:33【问题描述】:我正在使用FrameyAPI进行视频录制。当我发出请求时,我... 查看详情

前端uncaught(inpromise)的解决方法及原因(代码片段)

...看到接口请求正常响应并有返回,控制台却一直报错 Uncaught(inpromise) 排查一番之后发现,是接口响应拦截器里面的问题,原本封装好的请求方法里面r 查看详情

如何解决 Spark 上的纱线容器尺寸问题?

】如何解决Spark上的纱线容器尺寸问题?【英文标题】:Howtosolveyarncontainersizingissueonspark?【发布时间】:2017-04-0418:18:46【问题描述】:我想在YARN上启动一些pyspark作业。我有2个节点,每个节点10GB。我可以像这样打开pysparkshell:pys... 查看详情