Estoy tratando de cargar un archivo .json en una variable en javascript, pero no puedo hacer que funcione. Probablemente sea solo un error menor, pero no puedo encontrarlo.
Todo funciona bien cuando uso datos estáticos como este:
var json = {
id: "whatever",
name: "start",
children: [{
"id": "0.9685",
"name": " contents:queue"
}, {
"id": "0.79281",
"name": " contents:mqq_error"
}
}]
}
Puse todo lo que está en {}
un content.json
archivo e intenté cargarlo en una variable de JavaScript local como se explica aquí: cargar json en variable .
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "/content.json",
'dataType': "json",
'success': function(data) {
json = data;
}
});
return json;
})();
Lo ejecuté con el depurador de Chrome y siempre me dice que el valor de la variable json
es null
. El content.json
archivo reside en el mismo directorio que el archivo .js que lo llama.
¿Qué me perdí?
javascript
jquery
json
PogoMips
fuente
fuente
/content.json
que significa que el archivo está en el nivel raíz de su aplicación web. Cambie acontent.json
(sin barra) para señalarlo en el mismo directorio donde se encuentra su archivo de script. Solo en caso de que su archivo de script esté en el directorio de nivel raíz, funcionará.Respuestas:
Si pegó su objeto
content.json
directamente, es JSON inválido. Las claves y valores JSON deben estar entre comillas dobles ("
no'
) a menos que el valor sea numérico, booleanonull
o compuesto (matriz u objeto). JSON no puede contener funciones oundefined
valores. A continuación se muestra su objeto como JSON válido.También tenías un extra
}
.fuente
Mi solución, como se responde aquí , es usar:
El archivo se carga solo una vez, las solicitudes posteriores usan caché.
editar Para evitar el almacenamiento en caché, aquí está la función auxiliar de esta publicación de blog dada en los comentarios, usando el
fs
módulo:fuente
Para ES6 / ES2015 puede importar directamente como:
Si usa Typecript, puede declarar el módulo json como:
Desde TypeScript 2.9+ puede agregar - resolveJsonModule compilerOptions in
tsconfig.json
fuente
Uncaught SyntaxError: Unexpected token *
data
es un módulo perodata.default
es el objetoSyntaxError: Unexpected token *
import * as data from './example.json'
debido a un error de tipo mime.import * as data from './example.json';
entoncesdata
es solo un módulo, perodata.default
es el objeto. Pero cuando uso,import data from './example.json';
entoncesdata
es el objeto, que es más aplicableHay dos posibles problemas:
AJAX es asincrónico, por
json
lo que no estará definido cuando regrese de la función externa. Cuando se haya cargado el archivo, la función de devolución de llamada se establecerájson
en algún valor, pero en ese momento, a nadie le importa.Veo que intentaste arreglar esto con
'async': false
. Para verificar si esto funciona, agregue esta línea al código y verifique la consola de su navegador:El camino puede estar equivocado. Utilice la misma ruta que utilizó para cargar su secuencia de comandos en el documento HTML. Entonces, si su secuencia de comandos es
js/script.js
, usejs/content.json
Algunos navegadores pueden mostrarle a qué URL intentaron acceder y cómo fue (códigos de éxito / error, encabezados HTML, etc.). Consulte las herramientas de desarrollo de su navegador para ver qué sucede.
fuente
El incorporado módulo fs node.js lo hará de forma asíncrona o sincrónica según sus necesidades.
Puedes cargarlo usando
var fs = require('fs');
Asincrónico
Sincrónico
fuente
Para el formato json dado como en el archivo ~ / my-app / src / db / abc.json:
para importar a un archivo .js como ~ / my-app / src / app.js:
Salida:
fuente