node.jsにjsonが必要ですか


247

JavaScriptソースファイルと同じディレクトリにあるJavaScriptコードにいくつかのJSONファイルを含めたいのですが。

別のJavaScriptファイルを含めたい場合は、単に使用できますrequire。今、私はJSON を使用readFileSync__dirnameて取得していますが、JSONは醜い方法だと思います。

JSONファイルをロードできるようにするrequireに似たものはありますか?


:この同様の質問を参照してくださいstackoverflow.com/questions/4662851/...
holygeek

@coen「JSONファイルを含める」とはどういう意味ですか?それを読んで解析しますか?もしそうであれば、の可能性の重複:stackoverflow.com/questions/5726729/...
チロSantilli郝海东冠状病六四事件法轮功

2
はい; 読み取りと解析。しかし、これはjsファイルの読み取りと同様に、具体的にはファイルの読み取りであるため、これは重複することはなく、goatslackerの回答は引き続き有効です。
Coen

回答:


454

ノードv0.5.x以降では、jsファイルを必要とするのと同じようにJSONを要求できます。

var someObject = require('./somefile.json')

ES6の場合:

import someObject from ('./somefile.json')


1
これは本当ですか?それは私にとっては機能していません、そしてgithub.com/joyent/node/issues/1357github.com/joyent/node/pull/584機能していないことを示唆しています。
user161642 2012年

12
ファイルが同じディレクトリにあると想定して、require( './ somefile.json')を使用する必要があります(ドットとスラッシュに注意してください)。
スティーブウィルコック2013年

66
これには1つの落とし穴があります。結果はキャッシュされます!したがって、何らかの理由でデータを再度ロードする必要がある場合(たとえば、cronjobで)、同じ古い結果が得られます。
JuhoVepsäläinen2013年

41
注:拡張機能.jsonが重要なようです
nha

9
整形式のjsonも役立ちます
sdeburca

40

JSONファイルは明示的なexportsステートメントを必要としません。Javascriptファイルとして使用するためにエクスポートする必要はありません。

したがって、require有効なJSONドキュメントにのみ使用できます。

data.json

{
  "name": "Freddie Mercury"
}

main.js

var obj = require('data.json');

console.log(obj.name); 
//Freddie Mercury

20

いいえ。readFileまたはreadFileSync(後者は起動時のみ)を使用します。

または、次のような既存のライブラリを使用します

または、次のようなjsonファイルではなく、jsファイルに設定を書き込みます

module.exports = {
  // json
}

1
@coenはい、常に__dirname相対パスを作成するために使用します。
レイノス2011

これを実行すると、JSONはローカルにインポートされますが、AWSのEC2インスタンスのdockerコンテナーにはインポートされません... MIMEタイプを構成する代わりに、JSONの代わりにJSに切り替えました。これが誰かを助けることを願っています。
Erik Grosskurth

17

最も一般的な2つの

最初の方法:

let jsonData = require('./JsonFile.json')

let jsonData = require('./JsonFile') // .jsonを省略しても機能する場合

または

import jsonData from ('./JsonFile.json')

2番目の方法:

1)同期して

const fs = require('fs')
let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))

2)非同期

const fs = require('fs')
let jsonData = {}
fs.readFile('JsonFile.json', 'utf-8', (err, data) => {
  if (err) throw err

  jsonData = JSON.parse(data)
})

注:1)JsonFile.jsonが変更された場合、require( './ JsonFile.json')を再実行しても、新しいデータは取得されません。

2)fs.readFileまたはfs.readFileSyncは常にファイルを再度読み取り、変更を取得します


fsメソッドは、ノードを起動したディレクトリを開始点として使用し、読み取りを行うソースコードが存在するディレクトリではないことに注意してください。「require」メソッドは、インポートするソースコードの場所に対する相対パスを使用します。したがって、別のフォルダに保存するとすぐに、2つの方法のパスに違いが生じます。
Will59

3

拡張子.jsonを指定せずに、JSONのrequireを使用することもできます。インポートを変更せずに、ファイル拡張子を.jsに変更できます。

同じディレクトリに./myJsonFile.jsonがあると仮定します。

const data = require('./myJsonFile')

将来的に./myJsonFile.json./myJsonFile.jsに変更する場合、インポートでは何も変更しないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.