Estoy tratando de cargar un archivo JSON local pero no funcionará. Aquí está mi código JavaScript (usando jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
El archivo test.json:
{"a" : "b", "c" : "d"}
No se muestra nada y Firebug me dice que los datos no están definidos. En Firebug puedo ver json.responseText
y es bueno y válido, pero es extraño cuando copio la línea:
var data = eval("(" +json.responseText + ")");
en la consola de Firebug, funciona y puedo acceder a los datos.
¿Alguien tiene una solución?
javascript
jquery
json
firebug
local-files
Patrick Browne
fuente
fuente
JSON
cadena, ya está recuperando un objeto javascript, no es necesario usarloeval()
.test.json
no especifica ninguna ruta, por lo que es un URI relativo, relativo a la ubicación de la página que accede a él. Entonces, como @ seppo0010 dice que será local para el servidor si la página está en un servidor remoto en algún lugar y será relativo a su computadora si la página está en su sistema de archivos local al que accede elfile://
protocolo.Respuestas:
$.getJSON
es asíncrono, por lo que debe hacer:fuente
Tenía la misma necesidad (para probar mi aplicación angularjs), y la única forma que encontré es usar require.js:
nota: el archivo se carga una vez, las llamadas posteriores utilizarán la memoria caché.
Más sobre la lectura de archivos con nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js: http://requirejs.org/
fuente
jest.dontMock('./data.json');
o el resultado estará vacío. Puede ser útil para alguien por ahí :)json
?has not been loaded yet for context: _. Use require([])
De una manera más moderna, ahora puede usar la API Fetch :
Todos los navegadores modernos son compatibles con Fetch API. (¡Internet Explorer no lo hace, pero Edge sí!)
fuente:
Usando Fetch
Fetch en acción
Puedo usar...?
fuente
file://
esquema.) Pero es un enfoque limpio y agradable. He comenzado a usarlo gracias a esta respuesta.Si desea permitir que el usuario seleccione el archivo json local (en cualquier parte del sistema de archivos), la siguiente solución funciona.
Utiliza utiliza FileReader y JSON.parser (y no jquery).
Aquí hay una buena introducción sobre FileReader: http://www.html5rocks.com/en/tutorials/file/dndfiles/
fuente
newArr
Si está buscando algo rápido y sucio, simplemente cargue los datos en el encabezado de su documento HTML.
data.js
index.html
main.js
Debo mencionar que su tamaño de almacenamiento dinámico (en Chrome) es de aproximadamente 4 GB, por lo que si sus datos son más grandes que eso, debe encontrar otro método. Si desea verificar otro navegador intente esto:
fuente
Versión ES5
Versión ES6
fuente
file:///
protocolo y el archivo ya no puede considerarse local.No puedo creer cuántas veces se ha respondido esta pregunta sin comprender y / o abordar el problema con el código real del Cartel original. Dicho esto, soy un principiante (solo 2 meses de codificación). Mi código funciona perfectamente, pero siéntase libre de sugerir cualquier cambio. Aquí está la solución:
Aquí hay una forma más corta de escribir el mismo código que proporcioné anteriormente:
También puede usar $ .ajax en lugar de $ .getJSON para escribir el código exactamente de la misma manera:
Finalmente, la última forma de hacerlo es envolver $ .ajax en una función. No puedo tomar el crédito por este, pero lo modifiqué un poco. Lo probé y funciona y produce los mismos resultados que mi código anterior. Encontré esta solución aquí -> cargar json en variable
El archivo test.json que ve en mi código anterior está alojado en mi servidor y contiene el mismo objeto de datos json que él (el póster original) había publicado.
fuente
Me sorprende que no se haya mencionado la importación de es6 (uso con archivos pequeños)
Ex:
import test from './test.json'
webpack 2 <usa el
json-loader
valor predeterminado para los.json
archivos.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
Para TypeScript :
Para que funcione, primero tuve que declarar el módulo. Espero que esto ahorre algunas horas para alguien.
Si tratara de omitir
loader
desdejson-loader
que tengo el siguiente error dewebpack
:fuente
Probar es así (pero también tenga en cuenta que JavaScript no tiene acceso al sistema de archivos del cliente):
fuente
Recientemente D3js es capaz de manejar el archivo json local.
Este es el problema https://github.com/mbostock/d3/issues/673
Este es el parche para que D3 funcione con archivos json locales. https://github.com/mbostock/d3/pull/632
fuente
Encontré este hilo al intentar (sin éxito) cargar un archivo json local. Esta solución funcionó para mí ...
... y se usa así ...
... y este es el
<head>
...fuente
En TypeScript puede usar la importación para cargar archivos JSON locales. Por ejemplo, cargar un font.json:
Esto requiere una bandera tsconfig --resolveJsonModule:
Para obtener más información, consulte las notas de lanzamiento del mecanografiado: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
fuente
En angular (o cualquier otro marco), puede cargar usando http get Lo uso de esta manera:
Espero que esto ayude.
fuente
Lo que hice fue editar un poco el archivo JSON.
myfile.json
=>myfile.js
En el archivo JSON, (conviértalo en una variable JS)
{name: "Whatever"}
=>var x = {name: "Whatever"}
Al final,
export default x;
Luego,
import JsonObj from './myfile.js';
fuente
Si está utilizando una matriz local para JSON, como mostró en su ejemplo en la pregunta (test.json), entonces puede usar el
parseJSON()
método de JQuery ->getJSON()
se utiliza para obtener JSON desde un sitio remoto; no funcionará localmente (a menos que esté utilizando un servidor HTTP local)fuente
fuente
Un enfoque que me gusta usar es rellenar / envolver el json con un objeto literal y luego guardar el archivo con una extensión de archivo .jsonp. Este método también deja su archivo json original (test.json) sin modificaciones, ya que en su lugar trabajará con el nuevo archivo jsonp (test.jsonp). El nombre en el contenedor puede ser cualquier cosa, pero debe ser el mismo nombre que la función de devolución de llamada que utiliza para procesar el jsonp. Usaré su test.json publicado como ejemplo para mostrar la adición del contenedor jsonp para el archivo 'test.jsonp'.
A continuación, cree una variable reutilizable con alcance global en su secuencia de comandos para contener el JSON devuelto. Esto hará que los datos JSON devueltos estén disponibles para todas las demás funciones en su script en lugar de solo la función de devolución de llamada.
Luego viene una función simple para recuperar su json mediante inyección de script. Tenga en cuenta que no podemos usar jQuery aquí para agregar el script al encabezado del documento, ya que IE no es compatible con el método jQuery .append. El método jQuery comentado en el código a continuación funcionará en otros navegadores que admitan el método .append. Se incluye como referencia para mostrar la diferencia.
Lo siguiente es una función de devolución de llamada corta y simple (con el mismo nombre que el contenedor jsonp) para obtener los datos de resultados json en la variable global.
Ahora se puede acceder a los datos json mediante cualquier función del script utilizando la notación de puntos. Como ejemplo:
Este método puede ser un poco diferente de lo que está acostumbrado a ver, pero tiene muchas ventajas. Primero, el mismo archivo jsonp puede cargarse localmente o desde un servidor usando las mismas funciones. Como beneficio adicional, jsonp ya está en un formato amigable entre dominios y también se puede usar fácilmente con API de tipo REST.
De acuerdo, no hay funciones de manejo de errores, pero ¿por qué necesitarías una? Si no puede obtener los datos json utilizando este método, puede apostar que tiene algunos problemas dentro del json en sí, y lo comprobaría en un buen validador JSON.
fuente
Puedes poner tu json en un archivo javascript. Esto se puede cargar localmente (incluso en Chrome) utilizando la
getScript()
función de jQuery .archivo map-01.js:
main.js
salida:
Observe que la variable json se declara y se asigna en el archivo js.
fuente
No he encontrado ninguna solución usando la biblioteca de cierre de Google. Entonces, solo para completar la lista para visitantes futuros, así es como carga un JSON desde un archivo local con la biblioteca Closure:
fuente
Hice esto para mi aplicación cordova, como creé un nuevo archivo javascript para el JSON y pegué los datos de JSON y
String.raw
luego los analicé conJSON.parse
fuente
JavaScript Object Notation
(JSON):obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
para convertir a un objeto JavaScriptLo primero que hice fue, en primer lugar, desde la pestaña de red, registrar el tráfico de red para el servicio, y desde el cuerpo de respuesta, copiar y guardar el objeto json en un archivo local. Luego llame a la función con el nombre del archivo local, debería poder ver el objeto json en jsonOutout arriba.
fuente
Lo que funcionó para mí es lo siguiente:
Entrada:
Código Javascript:
fuente
Si tiene Python instalado en su máquina local (o no le importa instalar uno), aquí hay una solución independiente del navegador para el problema local de acceso a archivos JSON que uso:
Transforme el archivo JSON en JavaScript creando una función que devuelva los datos como objeto JavaScript. Luego puede cargarlo con la etiqueta <script> y llamar a la función para obtener los datos que desea.
Aquí viene el código de Python
fuente