仗义的夕阳 · [开源]基于 ...· 5 天前 · |
暗恋学妹的移动电源 · C# OUTLOOK - CSDN文库· 5 月前 · |
怕考试的日光灯 · nested exception is ...· 9 月前 · |
成熟的椰子 · 如何完美实现在DataGridView单元格 ...· 10 月前 · |
逃课的滑板 · jquery去掉双引号_mob649e815 ...· 11 月前 · |
含蓄的葡萄酒 · 解决springboot项目打成jar包部署 ...· 1 年前 · |
我在本地系统中保存了一个JSON文件,并创建了一个JavaScript文件,以便读取JSON文件并打印数据。下面是JSON文件:
{"resource":"A","literals":["B","C","D"]}
假设这是JSON文件的路径:
/Users/Documents/workspace/test.json
。
有人能帮我写一段简单的代码来读取JSON文件并打印JavaScript格式的数据吗?
如果您可以运行本地web服务器(正如上面 Chris P 建议的那样),并且可以使用jQuery,那么您可以尝试 http://api.jquery.com/jQuery.getJSON/
根据您的浏览器,您可以访问本地文件。但这可能并不适用于你的应用程序的所有用户。
要做到这一点,您可以尝试此处的说明: http://www.html5rocks.com/en/tutorials/file/dndfiles/
加载文件后,可以使用以下命令检索数据:
var jsonData = JSON.parse(theTextContentOfMyFile);
因为您有一个web应用程序,所以您可能有一个客户端和一个服务器。
如果您只有浏览器,并且您想从浏览器中运行的javascript中读取本地文件,这意味着您只有一个客户端。出于安全原因,浏览器不应允许您执行此类操作。
然而,正如上面所解释的,这似乎是可行的:
http://www.html5rocks.com/en/tutorials/file/dndfiles/
另一种解决方案是在你的机器中的某个地方设置一个web服务器(在windows中是tiny,在linux中是monkey ),并使用一个XMLHttpRequest或D3库,从服务器请求并读取文件。服务器将从本地文件系统获取该文件,并通过web将其提供给您。
来自硬盘的
The loading of a
.json
file
是一个异步操作,因此它需要指定一个回调函数,以便在文件加载后执行。
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
文件,方法是覆盖
"text/html"
、
"text/plain"
等的mime类型参数。
我喜欢Stano/Meetar上面的评论。我用它来读取.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。
使用 in Node.js or when using require.js in the browser 时,您可以简单地执行以下操作:
let json = require('/Users/Documents/workspace/test.json');
console.log(json, 'the json obj');
注意:文件加载一次,后续调用将使用缓存。
您可以使用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();
您可以使用console.log语句查看myObj的响应(已注释掉)。
如果您了解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;
}
如果文件位于不同的文件夹中,请提及完整路径,而不是文件名。
您可以使用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>
您必须创建一个新的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);
});
正如许多人之前提到的,使用AJAX调用不能正常工作。然而,有一种方法可以绕过它。使用input元素,您可以选择文件。
所选文件(.json)需要具有以下结构:
[
{"key": "value"},
{"key2": "value2"},
{"keyn": "valuen"},
]
<input type="file" id="get_the_file">
然后,您可以通过FileReader()使用JS读取该文件:
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);
});
使用 Fetch API 是最简单的解决方案:
fetch("test.json")
.then(response => response.json())
.then(json => console.log(json));
它在Firefox中运行完美,但在Chrome中你必须自定义安全设置。
非常简单。
将您的json文件重命名为".js“而不是".json”。
<script type="text/javascript" src="my_json.js"></script>
因此,正常地遵循您的代码。
<script type="text/javascript">
var obj = JSON.parse(contacts);
但是,仅供参考,内容我的json it's看起来像下面的片段。
contacts='[{"name":"bla bla", "email":bla bla, "address":"bla bla"}]';
我接受了 Stano's 优秀的答案,并将其封装在一个承诺中。如果您没有像node或webpack这样的选项来从文件系统加载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>'
});
只需使用$.getJSON,然后使用$.each来迭代密钥对/value。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)
});
你可以像ES6模块一样导入它;
import data from "/Users/Documents/workspace/test.json"
您可以使用d3.js导入JSON文件。只需在您的HTML体上调用d3:
<script src="https://d3js.org/d3.v5.min.js"></script>
然后将以下代码放到js脚本中:
d3.json("test.json").then(function(data_json) {
//do your stuff
})
使用
jQuery
和
ajax
可以很好地读取
JSON
文件并操作数据
$(document).ready(function () {
$.ajax({
url: 'country.json',
type: 'GET',
dataType: 'json',
success: function (code, statut) {
for (let i in code) {
console.log(i)
});
2021解决方案(适用于Chrome 91+)
您要导入JSON文件的JS文件应该是一个模块:
<script type="module" src="script.js"></script>
然后在
script.js
中导入您的
json
文件:
import data from "./data.json" assert { type: "json" };
您可以使用
console.log(data)
检查数据是否已加载
暗恋学妹的移动电源 · C# OUTLOOK - CSDN文库 5 月前 |