Доступ к данным загруженного файла JSON с использованием JavaScript
У меня есть HTML-код, как это:
<input type="file" id="up" />
<input type="submit" id="btn" />
И у меня есть файл JSON, как это:
{
"name": "John",
"family": "Smith"
}
И простая функция JavaScript:
alert_data(name, family)
{
alert('Name : ' + name + ', Family : '+ family)
}
Теперь я хочу вызвать alert_data()
с именем и семейством, которые хранятся в файле JSON, который загружен с использованием моего ввода HTML.
Есть ли способ использовать средство чтения файлов HTML5 или что-то еще?
Я не использую программирование на стороне сервера, все они на стороне клиента.
Ответы
Ответ 1
Вам понадобится браузер HTML5, но это возможно.
(function(){
function onChange(event) {
var reader = new FileReader();
reader.onload = onReaderLoad;
reader.readAsText(event.target.files[0]);
}
function onReaderLoad(event){
console.log(event.target.result);
var obj = JSON.parse(event.target.result);
alert_data(obj.name, obj.family);
}
function alert_data(name, family){
alert('Name : ' + name + ', Family : ' + family);
}
document.getElementById('file').addEventListener('change', onChange);
}());
<input id="file" type="file" />
<p>Select a file with the following format.</p>
<pre>
{
"name": "testName",
"family": "testFamily"
}
</pre>
Ответ 2
Здесь короткая версия Sam Greenhalghs отвечает, что работает для меня.
$(document).on('change', '.file-upload-button', function(event) {
var reader = new FileReader();
reader.onload = function(event) {
var jsonObj = JSON.parse(event.target.result);
alert(jsonObj.name);
}
reader.readAsText(event.target.files[0]);
});
<input class='file-upload-button' type="file" />
Ответ 3
Оп! Это можно сделать с помощью HTML5 FileReader. И это на самом деле довольно просто.
Сохраните json как .js файл и загрузите его в моем примере
{
"name": "John",
"family": "Smith"
}
Здесь происходит волшебство:
$("#up").change(function(event){
var uploadedFile = event.target.files[0];
if(uploadedFile.type !== "text/javascript" && uploadedFile.type !== "application/x-javascript") {
alert("Wrong file type == " + uploadedFile.type);
return false;
}
if (uploadedFile) {
var readFile = new FileReader();
readFile.onload = function(e) {
var contents = e.target.result;
var json = JSON.parse(contents);
alert_data(json);
};
readFile.readAsText(uploadedFile);
} else {
console.log("Failed to load file");
}
});
function alert_data(json)
{
alert('Name : ' + json.name + ', Family : '+ json.family)
}
Ссылка на этот код: http://jsfiddle.net/thomas_kingo/dfej7p3r/3/
(Проверка uploadedFile.type проверена только в Chrome и firefox)