Я пытаюсь загрузить локальный файл JSON, но он не будет работать. Вот мой код JavaScript (с использованием jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
Файл test.json:
{"a" : "b", "c" : "d"}
Ничего не отображается, и Firebug говорит мне, что данные не определены. В Firebug я вижу, json.responseText
и это хорошо и правильно, но странно, когда я копирую строку:
var data = eval("(" +json.responseText + ")");
в консоли Firebug это работает, и я могу получить доступ к данным.
У кого-нибудь есть решение?
javascript
jquery
json
firebug
local-files
Патрик Браун
источник
источник
JSON
строку, вы уже получаете объект javascript, его не нужно использоватьeval()
.test.json
не указан путь, поэтому он является относительным URI относительно местоположения страницы, к которой он обращается. Например, @ seppo0010 говорит, что он будет локальным для сервера, если страница находится где-то на удаленном сервере, и будет относительным по отношению к вашему компьютеру, если страница находится в локальной файловой системе, доступ к которой осуществляется поfile://
протоколу.Ответы:
$.getJSON
является асинхронным, поэтому вы должны сделать:источник
У меня была такая же потребность (для тестирования моего приложения angularjs), и единственный найденный способ - это использовать require.js:
примечание: файл загружается один раз, дальнейшие звонки будут использовать кеш.
Подробнее о чтении файлов с помощью nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js: http://requirejs.org/
источник
jest.dontMock('./data.json');
иначе результат будет пустым. Может быть полезным для кого-то там :)json
?has not been loaded yet for context: _. Use require([])
Теперь вы можете использовать Fetch API более современным способом :
Все современные браузеры поддерживают Fetch API. (Internet Explorer не делает, но Edge делает!)
источник:
Используя Fetch
Получить в действии
Могу ли я использовать...?
источник
file://
схеме». Но это хороший чистый подход. Я начал использовать его благодаря этому ответу.Если вы хотите позволить пользователю выбрать локальный файл json (в любом месте файловой системы), тогда работает следующее решение.
Он использует FileReader и JSON.parser (и не использует jquery).
Вот хорошее введение в FileReader: http://www.html5rocks.com/en/tutorials/file/dndfiles/
источник
newArr
Если вы ищете что-то быстрое и грязное, просто загрузите данные в заголовок вашего HTML-документа.
data.js
index.html
main.js
Я должен отметить, что ваш размер кучи (в Chrome) составляет около 4 ГБ, поэтому, если ваши данные больше, чем вы, вы должны найти другой метод. Если вы хотите проверить другой браузер, попробуйте это:
источник
Версия ES5
Версия ES6
источник
file:///
протокол, и файл больше не может считаться локальным.Я не могу поверить, сколько раз на этот вопрос был дан ответ, не понимая и / или не решая проблему с действительным кодом оригинального плаката. Тем не менее, я сам начинающий (всего 2 месяца программирования). Мой код работает отлично, но не стесняйтесь предлагать любые изменения в нем. Вот решение:
Вот более короткий способ написания того же кода, который я предоставил выше:
Вы также можете использовать $ .ajax вместо $ .getJSON, чтобы написать код точно так же:
Наконец, последний способ сделать это - обернуть $ .ajax в функцию. Я не могу взять кредит на этот, но я немного изменил его. Я протестировал его, и он работает и дает те же результаты, что и мой код выше. Я нашел это решение здесь -> загрузить JSON в переменную
test.json файл , который вы видите в моем коде выше размещается на моем сервере и содержит тот же объект JSON данных , что он (оригинальный плакат) был размещен.
источник
Я удивлен, импорт из es6 не был упомянут (использовать с небольшими файлами)
Пример:
import test from './test.json'
webpack 2 <использует файлы по
json-loader
умолчанию.json
.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
Для TypeScript :
Чтобы заставить его работать, я должен был сначала объявить модуль. Я надеюсь, что это сэкономит несколько часов для кого-то.
Если бы я попытался опустить
loader
отjson-loader
я получил следующее сообщение об ошибке изwebpack
:источник
Попробуйте это таким образом (но учтите, что у JavaScript нет доступа к файловой системе клиента):
источник
Недавно D3js может обрабатывать локальный файл JSON .
Это проблема https://github.com/mbostock/d3/issues/673
Это патч для D3 для работы с локальными файлами json. https://github.com/mbostock/d3/pull/632
источник
Нашел этот поток при попытке (безуспешно) загрузить локальный файл json. Это решение сработало для меня ...
... и используется так ...
... и это
<head>
...источник
В TypeScript вы можете использовать импорт для загрузки локальных файлов JSON. Например загрузка font.json:
Для этого требуется флаг tsconfig --resolveJsonModule:
Для получения дополнительной информации см. Примечания к выпуску машинописного текста: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html.
источник
В angular (или любой другой платформе) вы можете загрузить с помощью http, я использую что-то вроде этого:
Надеюсь это поможет.
источник
Я немного отредактировал файл JSON.
myfile.json
=>myfile.js
В файле JSON (сделайте его переменной JS)
{name: "Whatever"}
=>var x = {name: "Whatever"}
В конце,
export default x;
Затем,
import JsonObj from './myfile.js';
источник
Если вы используете локальный массив для JSON - как вы показали в своем примере в вопросе (test.json), то вы можете использовать
parseJSON()
метод JQuery ->getJSON()
используется для получения JSON с удаленного сайта - он не будет работать локально (если вы не используете локальный HTTP-сервер)источник
источник
Подход, который мне нравится использовать, состоит в том, чтобы дополнить / обернуть json объектным литералом, а затем сохранить файл с расширением .jsonp. Этот метод также оставляет исходный файл json (test.json) без изменений, поскольку вместо этого вы будете работать с новым файлом jsonp (test.jsonp). Имя в оболочке может быть любым, но оно должно совпадать с именем функции обратного вызова, которую вы используете для обработки jsonp. Я буду использовать ваш test.json, опубликованный в качестве примера, чтобы показать добавление jsonp-оболочки для файла 'test.jsonp'.
Затем создайте в скрипте повторно используемую переменную с глобальной областью действия для хранения возвращенного JSON. Это сделает возвращенные данные JSON доступными для всех других функций в вашем скрипте, а не только для функции обратного вызова.
Далее идет простая функция для получения вашего JSON путем инъекции скрипта. Обратите внимание, что мы не можем использовать jQuery здесь, чтобы добавить скрипт к заголовку документа, так как IE не поддерживает метод jQuery .append. Метод jQuery, закомментированный в приведенном ниже коде, будет работать в других браузерах, которые поддерживают метод .append. Он включен в качестве ссылки, чтобы показать разницу.
Далее следует короткая и простая функция обратного вызова (с тем же именем, что и у оболочки jsonp), чтобы получить данные результатов json в глобальную переменную.
Теперь к данным json могут обращаться любые функции скрипта, используя точечную запись. Например:
Этот метод может немного отличаться от того, что вы привыкли видеть, но имеет много преимуществ. Во-первых, один и тот же файл jsonp можно загрузить локально или с сервера, используя те же функции. В качестве бонуса, jsonp уже в междоменном дружественном формате и может также легко использоваться с API типа REST.
Конечно, нет никаких функций обработки ошибок, но зачем она вам нужна? Если вы не можете получить данные json с помощью этого метода, то можете поспорить, что у вас есть некоторые проблемы в самом json, и я бы проверил это на хорошем валидаторе JSON.
источник
Вы можете поместить свой JSON в файл JavaScript. Это можно загрузить локально (даже в Chrome) с помощью
getScript()
функции jQuery .файл map-01.js:
main.js
вывод:
Обратите внимание, что переменная json объявлена и назначена в файле js.
источник
Я не нашел никакого решения, используя библиотеку Google Closure. Итак, чтобы завершить список будущих висторов, вот как вы загружаете JSON из локального файла с помощью библиотеки Closure:
источник
Я сделал это для своего приложения Cordova, как будто я создал новый файл Javascript для JSON и вставил в него данные JSON, а
String.raw
затем проанализировал их с помощьюJSON.parse
источник
JavaScript Object Notation
(JSON):obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
для преобразования в объект JavaScriptПрежде всего я сделал на вкладке сеть запись сетевого трафика для службы, а в теле ответа скопировал и сохранил объект json в локальном файле. Затем вызовите функцию с локальным именем файла, вы должны увидеть объект json в jsonOutout выше.
источник
Что сработало для меня следующее:
Входные данные:
Код Javascript:
источник
Если у вас установлен Python на вашем локальном компьютере (или вы не против установить его), вот независимый от браузера обходной путь для локальной проблемы доступа к файлам JSON, который я использую:
Преобразуйте файл JSON в JavaScript, создав функцию, которая возвращает данные в виде объекта JavaScript. Затем вы можете загрузить его тегом <script> и вызвать функцию, чтобы получить нужные данные.
Здесь идет код Python
источник