Как прочитать внешний локальный файл JSON в JavaScript?
Я сохранил файл JSON в своей локальной системе и создал файл JavaScript, чтобы прочитать файл JSON и распечатать данные. Вот файл JSON:
{"resource":"A","literals":["B","C","D"]}
Допустим, это путь к файлу JSON: /Users/Documents/workspace/test.json
.
Может ли кто-нибудь помочь мне написать простой кусок кода, чтобы прочитать файл JSON и распечатать данные внутри него в JavaScript?
Ответы
Ответ 1
Вы не можете сделать вызов AJAX локальному ресурсу, поскольку запрос выполняется с использованием HTTP.
Обходной путь заключается в запуске локального веб-сервера, обслуживании файла и вызове AJAX на localhost.
Чтобы помочь вам написать код для чтения JSON, вы должны прочитать документацию для jQuery.getJSON()
:
http://api.jquery.com/jQuery.getJSON/
Ответ 2
Для чтения внешнего локального файла JSON (data.json) с помощью javascript сначала создайте файл data.json:
data = '[{"name" : "Ashwin", "age" : "20"},{"name" : "Abhinandan", "age" : "20"}]';
-
Упоминайте путь json файла в источнике script вместе с файлом javascript.
<script type="text/javascript" src="data.json"></script>
<script type="text/javascript" src="javascrip.js"></script>
-
Получить объект из json файла
var mydata = JSON.parse(data);
alert(mydata[0].name);
alert(mydata[0].age);
alert(mydata[1].name);
alert(mydata[1].age);
Для получения дополнительной информации см. эту ссылку.
Ответ 3
Загрузка файла .json
с жесткого диска является асинхронной операцией, поэтому необходимо указать функцию обратного вызова, которая будет выполняться после загрузки файла.
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
callback(rawFile.responseText);
}
}
rawFile.send(null);
}
//usage:
readTextFile("/Users/Documents/workspace/test.json", function(text){
var data = JSON.parse(text);
console.log(data);
});
Эта функция также работает для загрузки файлов .html
или .txt
, переопределяя параметр mime type на "text/html"
, "text/plain"
и т.д.
Ответ 4
- Сначала создайте файл JSON. В этом примере мой файл - words.json
[{"name":"ay","id":"533"},
{"name":"kiy","id":"33"},
{"name":"iy","id":"33"},
{"name":"iy","id":"3"},
{"name":"kiy","id":"35"},
{"name":"kiy","id":"34"}]
Ответ 5
Когда в Node.js или при использовании require.js в браузере, вы можете просто сделать:
let json = require('/Users/Documents/workspace/test.json');
Обратите внимание: файл загружается один раз, последующие вызовы будут использовать кеш.
Ответ 6
В зависимости от вашего браузера вы можете получить доступ к своим локальным файлам. Но это может не работать для всех пользователей вашего приложения.
Для этого вы можете попробовать следующие инструкции: http://www.html5rocks.com/en/tutorials/file/dndfiles/
После загрузки файла вы можете получить данные, используя:
var jsonData = JSON.parse(theTextContentOfMyFile);
Ответ 7
Использование Fetch API является самым простым решением:
fetch("test.json")
.then(response => response.json())
.then(json => console.log(json));
Он отлично работает в Firefox, но в Chrome вам нужно настроить параметры безопасности.
Ответ 8
Если вы используете локальные файлы, почему бы просто не упаковать данные как объект js?
data.js
MyData = { resource:"A",literals:["B","C","D"]}
Нет XMLHttpRequests, без разбора, просто используйте MyData.resource
напрямую
Ответ 9
Очень просто.
Переименуйте файл json в ".js" вместо ".json".
<script type="text/javascript" src="my_json.js"></script>
Так что следуйте вашему коду нормально.
<script type="text/javascript">
var obj = JSON.parse(contacts);
Тем не менее, только для информации, содержание моего JSON это выглядит как фрагмент ниже.
contacts='[{"name":"bla bla", "email":bla bla, "address":"bla bla"}]';
Ответ 10
Как уже упоминалось много людей, это не работает с использованием вызова AJAX. Однако есть способ обойти это. Используя элемент ввода, вы можете выбрать свой файл.
Выбранный файл (.json) должен иметь следующую структуру:
[
{"key": "value"},
{"key2": "value2"},
...
{"keyn": "valuen"},
]
<input type="file" id="get_the_file">
Затем вы можете прочитать файл, используя JS с FileReader():
document.getElementById("get_the_file").addEventListener("change", function() {
var file_to_read = document.getElementById("get_the_file").files[0];
var fileread = new FileReader();
fileread.onload = function(e) {
var content = e.target.result;
// console.log(content);
var intern = JSON.parse(content); // Array of Objects.
console.log(intern); // You can index every object
};
fileread.readAsText(file_to_read);
});
Ответ 11
Просто используйте $.getJSON, а затем $.each для итерации пары ключ/значение. Пример содержимого файла JSON и функционального кода:
{
{
"key": "INFO",
"value": "This is an example."
}
}
var url = "file.json";
$.getJSON(url, function (data) {
$.each(data, function (key, model) {
if (model.key == "INFO") {
console.log(model.value)
}
})
});
Ответ 12
Вы можете использовать метод XMLHttpRequest():
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var myObj = JSON.parse(this.responseText);
//console.log("Json parsed data is: " + JSON.stringify(myObj));
}
};
xmlhttp.open("GET", "your_file_name.json", true);
xmlhttp.send();
Вы можете увидеть ответ myObj с помощью оператора console.log(закомментировано).
Если вы знаете AngularJS, вы можете использовать $http:
MyController.$inject = ['myService'];
function MyController(myService){
var promise = myService.getJsonFileContents();
promise.then(function (response) {
var results = response.data;
console.log("The JSON response is: " + JSON.stringify(results));
})
.catch(function (error) {
console.log("Something went wrong.");
});
}
myService.$inject = ['$http'];
function myService($http){
var service = this;
service.getJsonFileContents = function () {
var response = $http({
method: "GET",
url: ("your_file_name.json")
});
return response;
};
}
Если у вас есть файл в другой папке, укажите полный путь вместо имени файла.
Ответ 13
Поскольку у вас есть веб-приложение, у вас может быть клиент и сервер.
Если у вас есть только ваш браузер и вы хотите прочитать локальный файл из javascript, который запущен в вашем браузере, это означает, что у вас есть только клиент. По соображениям безопасности браузер не должен позволять вам делать это.
Однако, как объяснил выше лахух, это, похоже, работает:
http://www.html5rocks.com/en/tutorials/file/dndfiles/
Другое решение - установить где-нибудь на вашем компьютере веб-сервер (крошечный в windows или monkey в linux) и библиотеку XMLHttpRequest или D3, запросить файл с сервера и прочитать его. Сервер будет извлекать файл из локальной файловой системы и обслуживать его через Интернет.
Ответ 14
Мне понравилось то, что сказал Стано/Встречный. Я использую его для чтения файлов .json.
Я расширил свои примеры с помощью Promise.
Вот и плукер для того же.
https://plnkr.co/edit/PaNhe1XizWZ7C0r3ZVQx?p=preview
function readTextFile(file, callback) {
var rawFile = new XMLHttpRequest();
rawFile.overrideMimeType("application/json");
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function() {
if (rawFile.readyState === 4 && rawFile.status == "200") {
callback(rawFile.responseText);
}
}
rawFile.send(null);
}
//usage:
// readTextFile("DATA.json", function(text){
// var data = JSON.parse(text);
// console.log(data);
// });
var task1 = function (){
return new Promise (function(resolve, reject){
readTextFile("DATA.json", function(text){
var data = JSON.parse(text);
console.log('task1 called');
console.log(data);
resolve('task1 came back');
});
});
};
var task2 = function (){
return new Promise (function(resolve, reject){
readTextFile("DATA2.json", function(text){
var data2 = JSON.parse(text);
console.log('task2 called');
console.log(data2);
resolve('task2 came back');
});
});
}
Promise.race([task1(), task2()])
.then(function(fromResolve){
console.log(fromResolve);
});
Чтение JSON может быть перенесено в другую функцию, для DRY; но здесь приведен пример демонстрации использования promises.
Ответ 15
Вы должны создать новый экземпляр XMLHttpRequest и загрузить содержимое файла json.
Этот совет работает для меня (https://codepen.io/KryptoniteDove/post/load-json-file-locally-using-pure-javascript):
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', 'my_data.json', true); // Replace 'my_data' with the path to your file
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
// Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
callback(xobj.responseText);
}
};
xobj.send(null);
}
loadJSON(function(response) {
// Parse JSON string into object
var actual_JSON = JSON.parse(response);
});
Ответ 16
Один простой обходной путь - поместить ваш файл JSON на локально работающий сервер. для этого из терминала перейдите в папку вашего проекта и запустите локальный сервер на некотором номере порта, например, 8181
python -m SimpleHTTPServer 8181
Затем, перейдя по адресу http://localhost: 8181/, должны отобразиться все ваши файлы, включая JSON. Не забудьте установить Python, если у вас его еще нет.
Ответ 17
Вы можете импортировать его как модуль ES6;
import data from "/Users/Documents/workspace/test.json"
Ответ 18
Если вы можете запустить локальный веб-сервер (в качестве Chris P, предложенный выше), и если вы можете использовать jQuery, вы можете попробовать http://api.jquery.com/jQuery.getJSON/
Ответ 19
Вы можете использовать D3 для обработки обратного вызова и загрузить локальный файл JSON data.json
, как показано ниже:
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
d3.json("data.json", function(error, data) {
if (error)
throw error;
console.log(data);
});
</script>
Ответ 20
Я взял превосходный ответ Стано и обернул его обещанием. Это может быть полезно, если у вас нет такой опции, как узел или веб-пакет, к которому можно прибегнуть для загрузки файла json из файловой системы:
// wrapped XMLHttpRequest in a promise
const readFileP = (file, options = {method:'get'}) =>
new Promise((resolve, reject) => {
let request = new XMLHttpRequest();
request.onload = resolve;
request.onerror = reject;
request.overrideMimeType("application/json");
request.open(options.method, file, true);
request.onreadystatechange = () => {
if (request.readyState === 4 && request.status === "200") {
resolve(request.responseText);
}
};
request.send(null);
});
Вы можете назвать это так:
readFileP('<path to file>')
.then(d => {
'<do something with the response data in d.srcElement.response>'
});
Ответ 21
Итак, если вы планируете пойти с "Apache Tomcat" для размещения вашего JSON файла,
1 > После запуска сервера убедитесь, что ваш Apache Tomcat запущен и запущен, перейдя по этому URL: "localhost: 8080" -
![введите описание изображения здесь]()
2 > Затем перейдите в папку "webapps" - "C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps". И создайте папку проекта или скопируйте папку проекта.
3 > Вставьте свой json файл туда.
в
4 > И это. Вы сделали! Просто перейдите к http://localhost:8080/ $project_name $/$jsonFile_name $.json " ![введите описание изображения здесь]()