Saya mencoba memuat file .json ke dalam variabel di javascript, tetapi saya tidak bisa membuatnya berfungsi. Ini mungkin hanya kesalahan kecil tetapi saya tidak dapat menemukannya.
Semuanya berfungsi dengan baik ketika saya menggunakan data statis seperti ini:
var json = {
id: "whatever",
name: "start",
children: [{
"id": "0.9685",
"name": " contents:queue"
}, {
"id": "0.79281",
"name": " contents:mqq_error"
}
}]
}
Saya meletakkan semua yang ada di {}
dalam content.json
file dan mencoba memuatnya ke variabel JavaScript lokal seperti yang dijelaskan di sini: muat json ke variabel .
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "/content.json",
'dataType': "json",
'success': function(data) {
json = data;
}
});
return json;
})();
Saya menjalankannya dengan debugger Chrome dan selalu memberi tahu saya bahwa nilai variabelnya json
adalah null
. The content.json
berkas berada dalam direktori yang sama dengan file js yang menyebutnya.
Apa yang saya lewatkan?
javascript
jquery
json
PogoMips
sumber
sumber
/content.json
artinya file tersebut berada di level root aplikasi web Anda. Ubah kecontent.json
(tanpa garis miring) untuk mengarahkannya ke direktori yang sama tempat file skrip Anda ditempatkan. Hanya dalam kasus jika file skrip Anda ada di direktori level root, itu akan berfungsi.Jawaban:
Jika Anda menempelkan objek Anda
content.json
secara langsung, itu adalah JSON yang tidak valid. Kunci dan nilai JSON harus dibungkus dengan tanda kutip ganda ("
bukan'
) kecuali nilainya adalah numerik, booleannull
, atau komposit (larik atau objek). JSON tidak boleh berisi fungsi atauundefined
nilai. Di bawah ini adalah objek Anda sebagai JSON yang valid.Anda juga punya ekstra
}
.sumber
Solusi saya, seperti yang dijawab di sini , adalah menggunakan:
File dimuat hanya sekali, permintaan lebih lanjut menggunakan cache.
edit Untuk menghindari caching, inilah fungsi helper dari blogpost ini yang diberikan di komentar, menggunakan
fs
modul:sumber
Untuk ES6 / ES2015 Anda dapat mengimpor langsung seperti:
Jika Anda menggunakan Typecript, Anda dapat mendeklarasikan modul json seperti:
Sejak Typecript 2.9+ Anda dapat menambahkan - resolJsonModule compilerOptions di
tsconfig.json
sumber
Uncaught SyntaxError: Unexpected token *
data
adalah modul tetapidata.default
objeknyaSyntaxError: Unexpected token *
import * as data from './example.json'
karena kesalahan jenis mime.import * as data from './example.json';
makadata
hanya modul, tetapidata.default
objeknya. Tetapi ketika saya menggunakanimport data from './example.json';
makadata
adalah objeknya, yang lebih dapat diterapkanAda dua kemungkinan masalah:
AJAX tidak sinkron, jadi
json
tidak akan ditentukan saat Anda kembali dari fungsi luar. Saat file telah dimuat, fungsi panggilan balik akan diseteljson
ke beberapa nilai tetapi pada saat itu, tidak ada yang peduli lagi.Saya melihat bahwa Anda mencoba memperbaikinya dengan
'async': false
. Untuk memeriksa apakah ini berfungsi, tambahkan baris ini ke kode dan periksa konsol browser Anda:Jalannya mungkin salah. Gunakan jalur yang sama yang Anda gunakan untuk memuat skrip Anda di dokumen HTML. Jadi, jika skrip Anda adalah
js/script.js
, gunakanjs/content.json
Beberapa browser dapat menunjukkan kepada Anda URL mana yang mereka coba akses dan bagaimana hasilnya (kode sukses / kesalahan, header HTML, dll). Periksa alat pengembangan browser Anda untuk melihat apa yang terjadi.
sumber
Built-in node.js modul fs akan melakukannya secara asinkron atau sinkron tergantung pada kebutuhan Anda.
Anda dapat memuatnya menggunakan
var fs = require('fs');
Asinkron
Sinkronis
sumber
Untuk format json yang diberikan seperti pada file ~ / my-app / src / db / abc.json:
inorder untuk mengimpor ke file .js seperti ~ / my-app / src / app.js:
Keluaran:
sumber