Mientras desarrollaba una extensión de Chrome, encontré un problema en el que intento recuperar un archivo JSON grande (~ 1 GB) mediante la solicitud XMLHttpRequest GET. El archivo está ubicado en mi máquina local y recupero el enlace de descarga usando chrome.runtime.getURL('data.json') desde un script de contenido.
el error que me sale es
Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at xhr.onreadystatechange (<anonymous>:11:23) at XMLHttpRequest.<anonymous>Supuse que se debe a que el archivo JSON es demasiado grande y, por lo tanto, no es posible descargarlo de una sola vez (corríjanme si este no fuera el caso). ¿Hay alguna solución para esta limitación de tamaño?
Genero el archivo JSON a partir de un script de python, por lo tanto, es completamente posible elegir un formato diferente (tal vez algún formato binario) si es necesario.
Además, no puedo usar ninguna API proporcionada para las extensiones de Chrome, ya que la secuencia de comandos desde la que estoy llamando a XMLHttpRequest no es una secuencia de comandos de contenido, sino una secuencia de comandos adjunta al cuerpo del sitio web.
Aquí hay un código mínimo para la reproducción (no olvide configurar content_security_policy en el manifiesto para habilitar la ejecución del script en línea).
// Content script function init() { let script = document.createElement("script"); script.appendChild(document.createTextNode(__magic.toString() + "; __magic('" + chrome.runtime.getURL('data.json') + "');")); script.id = "__magic"; document.body.appendChild(script); } function __magic(url) { var db; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { db = JSON.parse(xhr.response); window.setInterval(check, 10); } }; xhr.open("GET", url, true); xhr.send(); } init();Editar
Olvidé decir que tuve éxito al cargar el archivo JSON grande en python, por lo tanto, creo que es seguro asumir que el archivo JSON no está dañado.
Además, el archivo JSON almacena una estructura gráfica: elijo el siguiente diseño para el archivo json
{ "node1": { "children": ["node2", "node3"], "foo": 15 }, "node2": { "children": ["node15", "node1"], "foo": 90 }, ... }Apuesto a que hay una forma más eficiente de almacenar una estructura gráfica en lugar de usar JSON, sin embargo, hasta ahora no pude encontrar ninguna que fuera compatible con javascript.