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/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

2
예; 읽고 파싱하십시오. 그러나 이것은 js 파일을 읽는 것과 유사하게 파일 을 읽으므로 중복되지 않으며 goatslacker의 대답은 여전히 ​​유효합니다.
Coen

답변:


455

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

12
파일이 동일한 디렉토리에 있다고 가정하면 require ( './ somefile.json')을 사용해야합니다 (점과 슬래시 참고).
Steve Willcock 21시 19 분

66
이것에 대한 하나의 문제가 있습니다. 결과가 캐시됩니다! 따라서 어떤 이유로 든 데이터를 다시로드 해야하는 경우 (예 : cronjob) 동일한 결과를 얻을 수 있습니다.
Juho Vepsäläinen

41
참고 : 확장 .json은 중요해 보인다
nha

9
잘 구성된 json도 도움이됩니다
sdeburca

40

JSON 파일에는 명시 적 내보내기 문이 필요하지 않습니다. Javascript 파일로 사용하기 위해 내보낼 필요는 없습니다.

따라서 require유효한 JSON 문서 에만 사용할 수 있습니다 .

data.json

{
  "name": "Freddie Mercury"
}

main.js

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

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

20

아니요. readFile또는 readFileSync시작시에만 사용 합니다.

또는 같은 기존 라이브러리를 사용하십시오.

또는 구성을 js 파일 대신 js 파일에 작성하십시오.

module.exports = {
  // json
}

1
@coen 예, 우리는 항상 __dirname상대 경로를 만드는 데 사용 합니다.
Raynos

AWS에서 EC2 인스턴스의 도커 컨테이너가 아닌 JSON을 로컬로 가져 오는 위치에 도달했습니다 ... 마임 유형을 구성하려고 시도하지 않고 JSON 대신 JS로 전환했습니다. 이것이 누군가를 도울 수 있기를 바랍니다.
Erik Grosskurth

17

가장 일반적인 두 가지

첫 번째 방법 :

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

let jsonData = require('./JsonFile') // .json을 생략하면 작동합니다.

또는

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

두 번째 방법 :

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"메소드는 가져 오기 소스 코드 위치에 상대적인 경로를 사용합니다. 따라서 다른 폴더에 물건을 저장하자마자 두 방법 사이의 경로에 차이가 있습니다.
Will59

3

확장명 .json 을 지정하지 않고도 JSON 필요 를 사용할 수도 있습니다 . 가져 오기를 변경하지 않고도 파일 확장자를 .js로 변경할 수 있습니다 .

동일한 디렉토리에 ./myJsonFile.json이 있다고 가정합니다 .

const data = require('./myJsonFile')

앞으로 ./myJsonFile.json./myJsonFile.js 로 변경하면 가져 오기에서 아무것도 변경하지 않아야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.