[英]Load local JSON file into variable
我試圖將 a.json 文件加載到 javascript 中的一個變量中,但我無法讓它工作。 這可能只是一個小錯誤,但我找不到它。
當我像這樣使用 static 數據時,一切正常:
var json = {
id: "whatever",
name: "start",
children: [{
"id": "0.9685",
"name": " contents:queue"
}, {
"id": "0.79281",
"name": " contents:mqq_error"
}
}]
}
我將{}
中的所有內容都放在content.json
文件中,並嘗試將其加載到本地 JavaScript 變量中,如下所述: 將 json 加載到變量中。
var json = (function() {
var json = null;
$.ajax({
'async': false,
'global': false,
'url': "/content.json",
'dataType': "json",
'success': function(data) {
json = data;
}
});
return json;
})();
我用 Chrome 調試器運行它,它總是告訴我變量json
的值是null
。 content.json
文件與調用它的 .js 文件位於同一目錄中。
我錯過了什么?
對於 ES6/ES2015,您可以直接導入,如:
// example.json
{
"name": "testing"
}
// ES6/ES2015
// app.js
import * as data from './example.json';
const {name} = data;
console.log(name); // output 'testing'
如果你使用 Typescript,你可以像這樣聲明 json 模塊:
// tying.d.ts
declare module "*.json" {
const value: any;
export default value;
}
從 Typescript 2.9+ 開始,您可以在tsconfig.json
添加--resolveJsonModule compilerOptions
{
"compilerOptions": {
"target": "es5",
...
"resolveJsonModule": true,
...
},
...
}
如果直接將對象粘貼到content.json
,則它是無效的 JSON。 JSON 鍵和值必須用雙引號( "
而不是'
)括起來,除非值是數字、布爾值、 null
或復合(數組或對象)。JSON 不能包含函數或undefined
值。以下是您的對象作為有效的 JSON。
{
"id": "whatever",
"name": "start",
"children": [
{
"id": "0.9685",
"name": " contents:queue"
},
{
"id": "0.79281",
"name": " contents:mqq_error"
}
]
}
你還有一個額外的}
。
有兩個可能的問題:
AJAX 是異步的,因此當您從外部函數返回時, json
將是未定義的。 當文件被加載后,回調函數會將json
設置為某個值,但到那時,沒有人會在意了。
我看到你試圖用'async': false
解決這個問題。 要檢查這是否有效,請將此行添加到代碼中並檢查瀏覽器的控制台:
console.log(['json', json]);
路徑可能不對。 使用您用來在 HTML 文檔中加載腳本的相同路徑。 因此,如果您的腳本是js/script.js
,請使用js/content.json
某些瀏覽器可以向您顯示他們嘗試訪問的 URL 以及訪問方式(成功/錯誤代碼、HTML 標頭等)。 檢查瀏覽器的開發工具,看看會發生什么。
內置的node.js 模塊 fs將根據您的需要異步或同步執行此操作。
您可以使用var fs = require('fs');
加載它var fs = require('fs');
fs.readFile('./content.json', (err, data) => {
if (err)
console.log(err);
else {
var json = JSON.parse(data);
//your code using json object
}
})
var json = JSON.parse(fs.readFileSync('./content.json').toString());
對於文件 ~/my-app/src/db/abc.json 中給定的 json 格式:
[
{
"name":"Ankit",
"id":1
},
{
"name":"Aditi",
"id":2
},
{
"name":"Avani",
"id":3
}
]
為了導入到 .js 文件,如 ~/my-app/src/app.js:
const json = require("./db/abc.json");
class Arena extends React.Component{
render(){
return(
json.map((user)=>
{
return(
<div>{user.name}</div>
)
}
)
}
);
}
}
export default Arena;
輸出:
Ankit Aditi Avani
沒有 require 或 fs 的解決方案:
var json = []
fetch('./content.json').then(response => json = response.json())
免費的 JSON 個文件可以與 go 一起使用到https://jsonplaceholder.typicode.com/
並導入您的 JSON 文件試試這個
const dataframe1=require('./users.json');
console.log(dataframe1);
要將 output.json(包含問題共享的 json)文件中的特定值導出到變量,請說 VAR:
export VAR=$(jq -r '.children.id' output.json)
來自未來的答案。
在 2022 年,我們在 js 文件中有導入斷言 api 用於導入 json 文件。
import myjson from "./myjson.json" assert { type: "json" };
console.log(myjson);
瀏覽器支持:直到 2022 年 9 月,僅支持基於 chromium 的瀏覽器。
閱讀更多內容: v8 導入斷言帖子
import myJson from '/path/to/filename.json'
myJsonString = JSON.stringify(myJson)
如果文件在同一目錄中,則可以使用
import myJson from './filename.json
var json = require('./filename.json');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.