Saya mencoba memuat file JSON lokal tetapi tidak berfungsi. Ini kode JavaScript saya (menggunakan jQuery:
var json = $.getJSON("test.json");
var data = eval("(" +json.responseText + ")");
document.write(data["a"]);
File test.json:
{"a" : "b", "c" : "d"}
Tidak ada yang ditampilkan dan Firebug memberi tahu saya bahwa data tidak terdefinisi. Di Firebug saya bisa melihat json.responseText
dan itu bagus dan valid, tetapi aneh ketika saya menyalin baris:
var data = eval("(" +json.responseText + ")");
di konsol Firebug, ia berfungsi dan saya dapat mengakses data.
Adakah yang punya solusi?
javascript
jquery
json
firebug
local-files
Patrick Browne
sumber
sumber
JSON
string, Anda sudah mengambil objek javascript, tidak perlu digunakaneval()
.test.json
tidak menentukan jalur apa pun sehingga merupakan URI relatif, relatif terhadap lokasi halaman yang mengaksesnya. Jadi seperti @ seppo0010 mengatakan itu akan menjadi lokal ke server jika halaman berada di server jauh di suatu tempat dan itu akan relatif ke komputer Anda jika halaman tersebut di sistem file lokal Anda diakses olehfile://
protokol.Jawaban:
$.getJSON
asinkron sehingga Anda harus melakukan:sumber
Saya memiliki kebutuhan yang sama (untuk menguji aplikasi angularjs saya), dan satu-satunya cara yang saya temukan adalah dengan menggunakan require.js:
catatan: file dimuat sekali, panggilan selanjutnya akan menggunakan cache.
Lebih lanjut tentang membaca file dengan nodejs: http://docs.nodejitsu.com/articles/file-system/how-to-read-files-in-nodejs
require.js: http://requirejs.org/
sumber
jest.dontMock('./data.json');
atau hasilnya kosong. Mungkin bermanfaat bagi seseorang di luar sana :)json
?has not been loaded yet for context: _. Use require([])
Dengan cara yang lebih modern, Anda sekarang dapat menggunakan API Ambil :
Semua browser modern mendukung Fetch API. (Internet Explorer tidak, tetapi Edge melakukannya!)
sumber:
Menggunakan Fetch
Ambil Tindakan
Bisakah saya menggunakan ...?
sumber
file://
skema.) Tapi itu pendekatan yang bagus dan bersih. Saya sudah mulai menggunakannya berkat jawaban ini.Jika Anda ingin membiarkan pengguna memilih file json lokal (di mana saja di sistem file), maka solusi berikut berfungsi.
Menggunakan FileReader dan JSON.parser (dan tanpa jquery).
Berikut adalah pengantar yang bagus tentang FileReader: http://www.html5rocks.com/en/tutorials/file/dndfiles/
sumber
newArr
Jika Anda mencari sesuatu yang cepat dan kotor, hanya memuat data di kepala dokumen HTML Anda.
data.js
index.html
main.js
Saya harus menyebutkan bahwa ukuran tumpukan Anda (di Chrome) sekitar 4GB, jadi jika data Anda lebih besar dari itu, Anda harus mencari metode lain. Jika Anda ingin memeriksa peramban lain coba ini:
sumber
Versi ES5
Versi ES6
sumber
file:///
protokol dan file tidak dapat dianggap lokal lagi.Saya tidak percaya berapa kali pertanyaan ini dijawab tanpa memahami dan / atau mengatasi masalah dengan kode asli Poster Asli. Yang mengatakan, saya sendiri pemula (hanya 2 bulan coding). Kode saya berfungsi dengan baik, tetapi jangan ragu untuk menyarankan perubahan apa pun padanya. Inilah solusinya:
Berikut cara menulis kode yang sama dengan yang saya berikan di atas:
Anda juga dapat menggunakan $ .ajax bukannya $ .getJSON untuk menulis kode dengan cara yang persis sama:
Akhirnya, cara terakhir untuk melakukan ini adalah dengan membungkus $ .ajax dalam suatu fungsi. Saya tidak dapat mengambil kredit untuk yang satu ini, tetapi saya memang memodifikasinya sedikit. Saya mengujinya dan berfungsi dan menghasilkan hasil yang sama dengan kode saya di atas. Saya menemukan solusi ini di sini -> memuat json ke dalam variabel
File test.json yang Anda lihat dalam kode saya di atas di-host di server saya dan berisi objek data json yang sama yang telah diposting olehnya (poster asli).
sumber
Saya terkejut impor dari ES6 belum disebutkan (digunakan dengan file kecil)
Ex:
import test from './test.json'
webpack 2 <menggunakan
json-loader
sebagai default untuk.json
file.https://webpack.js.org/guides/migrating/#json-loader-is-not-required-anymore
Untuk TypeScript :
Untuk membuatnya bekerja, saya harus mendeklarasikan modul terlebih dahulu. Saya harap ini akan menghemat beberapa jam untuk seseorang.
Jika saya mencoba untuk menghilangkan
loader
darijson-loader
saya mendapat kesalahan berikut dariwebpack
:sumber
Coba dengan cara seperti itu (tetapi juga harap dicatat bahwa JavaScript tidak memiliki akses ke sistem file klien):
sumber
Baru-baru ini D3js dapat menangani file json lokal.
Ini masalahnya https://github.com/mbostock/d3/issues/673
Ini adalah patch inorder untuk D3 untuk bekerja dengan file json lokal. https://github.com/mbostock/d3/pull/632
sumber
Menemukan utas ini ketika mencoba (tidak berhasil) untuk memuat file json lokal. Solusi ini bekerja untuk saya ...
... dan digunakan seperti ini ...
... dan ini adalah
<head>
...sumber
Di TypeScript Anda bisa menggunakan impor untuk memuat file JSON lokal. Misalnya memuat font.json:
Ini membutuhkan flag tsconfig --resolveJsonModule:
Untuk informasi lebih lanjut, lihat catatan rilis naskah: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html
sumber
Di sudut (atau kerangka kerja lain), Anda dapat memuat menggunakan http agar saya menggunakannya seperti ini:
Semoga ini membantu.
sumber
Apa yang saya lakukan adalah mengedit file JSON sedikit.
myfile.json
=>myfile.js
Dalam file JSON, (jadikan variabel JS)
{name: "Whatever"}
=>var x = {name: "Whatever"}
Pada akhirnya,
export default x;
Kemudian,
import JsonObj from './myfile.js';
sumber
Jika Anda menggunakan array lokal untuk JSON - seperti yang Anda tunjukkan dalam contoh Anda di pertanyaan (test.json) maka Anda bisa menggunakan
parseJSON()
metode JQuery ->getJSON()
digunakan untuk mendapatkan JSON dari situs jarak jauh - ini tidak akan berfungsi secara lokal (kecuali jika Anda menggunakan Server HTTP lokal)sumber
sumber
Suatu pendekatan yang saya suka gunakan adalah untuk melapisi / membungkus json dengan objek literal, dan kemudian menyimpan file dengan ekstensi file .jsonp. Metode ini juga membiarkan file json asli Anda (test.json) tidak diubah, karena Anda akan bekerja dengan file jsonp baru (test.jsonp) sebagai gantinya. Nama pada pembungkus bisa berupa apa saja, tetapi nama itu harus sama dengan fungsi panggilan balik yang Anda gunakan untuk memproses jsonp. Saya akan menggunakan test.json Anda yang diposting sebagai contoh untuk memperlihatkan tambahan jsonp wrapper untuk file 'test.jsonp'.
Selanjutnya, buat variabel yang dapat digunakan kembali dengan cakupan global di skrip Anda untuk menahan JSON yang dikembalikan. Ini akan membuat data JSON yang dikembalikan tersedia untuk semua fungsi lain dalam skrip Anda alih-alih hanya fungsi panggilan balik.
Berikutnya adalah fungsi sederhana untuk mengambil json Anda dengan injeksi skrip. Perhatikan bahwa kita tidak dapat menggunakan jQuery di sini untuk menambahkan skrip ke kepala dokumen, karena IE tidak mendukung metode jQuery .append. Metode jQuery yang dikomentari dalam kode di bawah ini akan berfungsi pada browser lain yang mendukung metode .append. Itu dimasukkan sebagai referensi untuk menunjukkan perbedaan.
Berikutnya adalah fungsi panggilan balik pendek dan sederhana (dengan nama yang sama dengan pembungkus jsonp) untuk mendapatkan data hasil json ke dalam variabel global.
Data json sekarang dapat diakses oleh berbagai fungsi skrip menggunakan notasi titik. Sebagai contoh:
Metode ini mungkin sedikit berbeda dari yang biasa Anda lihat, tetapi memiliki banyak keuntungan. Pertama, file jsonp yang sama dapat dimuat secara lokal atau dari server menggunakan fungsi yang sama. Sebagai bonus, jsonp sudah dalam format ramah lintas domain dan juga dapat dengan mudah digunakan dengan API jenis REST.
Memang, tidak ada fungsi penanganan kesalahan, tetapi mengapa Anda membutuhkannya? Jika Anda tidak dapat memperoleh data json menggunakan metode ini, maka Anda bisa bertaruh Anda memiliki beberapa masalah di dalam json itu sendiri, dan saya akan memeriksanya pada validator JSON yang bagus.
sumber
Anda dapat menempatkan json Anda di file javascript. Ini dapat dimuat secara lokal (bahkan di Chrome) menggunakan jQuery's
getScript()
fungsi .file map-01.js:
main.js
keluaran:
Perhatikan bahwa variabel json dideklarasikan dan ditugaskan dalam file js.
sumber
Saya belum menemukan solusi apa pun menggunakan pustaka Penutupan Google. Jadi hanya untuk melengkapi daftar untuk calon pengunjung, inilah cara Anda memuat JSON dari file lokal dengan pustaka Closure:
sumber
Saya melakukan ini untuk aplikasi cordova saya, seperti saya membuat file javascript baru untuk JSON dan menempelkan data JSON ke dalam
String.raw
kemudian menguraikannya denganJSON.parse
sumber
JavaScript Object Notation
(JSON):obj = [{"name": "Jeeva"}, {"name": "Kumar"}]
JSON.parse
untuk mengonversi ke objek JavaScriptApa yang saya lakukan adalah, pertama-tama, dari tab jaringan, merekam lalu lintas jaringan untuk layanan, dan dari badan respons, menyalin dan menyimpan objek json dalam file lokal. Kemudian memanggil fungsi dengan nama file lokal, Anda harus dapat melihat objek json di jsonOutout di atas.
sumber
Apa yang berhasil untuk saya adalah sebagai berikut:
Memasukkan:
Kode Javascript:
sumber
Jika Anda memasang Python di mesin lokal Anda (atau Anda tidak keberatan menginstalnya), berikut ini solusi untuk masalah browser-independen untuk masalah akses file JSON lokal yang saya gunakan:
Ubah file JSON menjadi JavaScript dengan membuat fungsi yang mengembalikan data sebagai objek JavaScript. Kemudian Anda dapat memuatnya dengan tag <script> dan memanggil fungsi untuk mendapatkan data yang Anda inginkan.
Di sinilah kode Python
sumber