Я пытаюсь загрузить файл .json в переменную в javascript, но не могу заставить его работать. Вероятно, это небольшая ошибка, но я не могу ее найти.
Все работает нормально, когда я использую такие статические данные:
var json = {
id: "whatever",
name: "start",
children: [{
"id": "0.9685",
"name": " contents:queue"
}, {
"id": "0.79281",
"name": " contents:mqq_error"
}
}]
}
Я поместил все, что находится {}
в content.json
файле, и попытался загрузить это в локальную переменную JavaScript, как описано здесь: загрузить json в переменную .
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "/content.json",
'dataType': "json",
'success': function(data) {
json = data;
}
});
return json;
})();
Я запускал его с помощью отладчика Chrome, и он всегда сообщает мне, что значение переменной json
равно null
. В content.json
файл находится в том же каталоге, что и файл .js , который вызывает его.
Что я пропустил?
javascript
jquery
json
PogoMips
источник
источник
/content.json
означает, что файл находится на корневом уровне вашего веб-приложения. Измените наcontent.json
(без косой черты), чтобы указать его в том же каталоге, где находится ваш файл сценария. Только в том случае, если ваш файл скрипта находится в каталоге корневого уровня, он будет работать.Ответы:
Если вы вставили свой объект
content.json
напрямую, это недействительный JSON. Ключи и значения JSON должны быть заключены в двойные кавычки ("
не'
), если значение не является числовым, логическимnull
или составным (массив или объект). JSON не может содержать функции илиundefined
значения. Ниже ваш объект как действительный JSON.У вас тоже была доп
}
.источник
Мое решение, как здесь было сказано , заключается в использовании:
Файл загружается только один раз, дальнейшие запросы используют кеш.
edit Чтобы избежать кеширования, вот вспомогательная функция из этого сообщения в блоге, указанная в комментариях, с использованием
fs
модуля:источник
Для ES6 / ES2015 вы можете импортировать напрямую, например:
Если вы используете Typescript, вы можете объявить модуль json, например:
Начиная с Typescript 2.9+ вы можете добавить - resolveJsonModule compilerOptions в
tsconfig.json
источник
Uncaught SyntaxError: Unexpected token *
data
что это модуль, ноdata.default
это объектSyntaxError: Unexpected token *
import * as data from './example.json'
из-за ошибки типа mime.import * as data from './example.json';
then,data
это просто модуль, ноdata.default
это объект. Но когда я используюimport data from './example.json';
тоdata
есть объект, который является более applicapableВозможны две проблемы:
AJAX является асинхронным, поэтому
json
будет неопределенным при возврате из внешней функции. Когда файл загружен, функция обратного вызова установитjson
какое-то значение, но в это время никого не волнует.Я вижу, что вы пытались исправить это с помощью
'async': false
. Чтобы проверить, работает ли это, добавьте эту строку в код и проверьте консоль вашего браузера:Путь может быть неправильным. Используйте тот же путь, который вы использовали для загрузки вашего скрипта в HTML-документ. Итак, если ваш сценарий есть
js/script.js
, используйтеjs/content.json
Некоторые браузеры могут показать вам, к каким URL-адресам они пытались получить доступ и как это было (коды успеха / ошибки, заголовки HTML и т. Д.). Проверьте средства разработки вашего браузера, чтобы узнать, что происходит.
источник
Встроенный модуль node.js fs будет делать это асинхронно или синхронно в зависимости от ваших потребностей.
Вы можете загрузить его, используя
var fs = require('fs');
Асинхронный
Синхронный
источник
Для данного формата json, как в файле ~ / my-app / src / db / abc.json:
Порядок импорта в файл .js, например ~ / my-app / src / app.js:
Вывод:
источник