JSON 이란, JavaScript Object Notation의 약자로
JavaScript 객체 문법으로 구조화된 데이터 교환 형식
입니다.
JavaScript 뿐만 아니라, 여러 언어에서 데이터 교환 형식
으로 사용되며,
객체문법 말고도 단순배열,문자열도 표현이 가능합니다.
javascript의 object는
키(key)와 값(value)로 이루어져있습니다.
이미 존재하는 키를 중복선언한다면 제일 마지막에 선언한 값이 덮혀집니다.
{
"name" : "kyu",
"name" : "kyu",
"name" : "kyu"
}
JSON 파일을 사용하려면 어떻게 해야할까요?
JSON의 파일은 문자열(String)으로 구성되어 있습니다.
JSON의 파일을 javascript 에서 사용하고 싶다면,
JSON 파일을 javascript 에서 데이터에 접근할 수 있도록 역직렬화를 해야합니다.
[
{ "a" : "1"},
{ "b" : "2"}
]
const fs = require('fs')
const path = require('path')
const a = fs.readFileSync(path.join(__dirname,"a.json"))
console.log(a)
console.log(JSON.parse(a))
상단의 예시코드를 보면서 확인해보겠습니다.
const fs = require('fs')
const path = require('path')
const a = fs.readFileSync(path.join(__dirname,"a.json"))
우선 fs는 FileSystem의 약자로, fs 모듈은 Node.js에서 파일 입출력을 하고 싶을 때 사용합니다.
fs.readFileSync는 fs모듈에서 파일을 읽어들이는 함수로,
readFile()과 readFileSync()가 있는데 "Sync"가 붙은것은 동기적으로 실행하고 싶을 때 사용합니다.
동기와 비동기에 대해서 간략하게만 설명해보자면,
동기(Synchronous)
동기는 한번에 한가지 작업을 하는 것으로, 앞의 작업이 끝나야 다음 작업으로 넘어가는 방식이다.
자세히 설명하면 요청을 보낸 후, 요청에 대한 응답을 받아야 다음 작업을 실행하는 것이다.
일반적인 많은 프로그램이 이와같은 방법으로 실행된다.
비동기(Asynchronous)
비동기는 요청을 보낸 후, 응답에 상관 없이 다음 동작을 실행하는 것이다.
즉, 다음 동작을 실행하고 있을 때, 앞의 동작이 끝나지 않았으면 앞의 동작과 함께 다음 동작이 실행된다.
다시 돌아가서 JSON 파일을 읽어왔고 그 후 코드를 보겠습니다.
console.log(typeof(a))
console.log(a)
console.log(JSON.parse(a))
console.log(typeof(JSON.parse(a)))
JSON.parse
라는 역직렬화를 거치지 않고 출력을 해본다면,
string
타입이 출력이 되고,
JSON.parse
역직렬화를 거치고 출력을 한다면
object
타입이 출력이 되는 것을 확인할 수 있습니다.
이처럼 사용하는 프로그래밍 언어에서 원하는 데이터로 적절하게 사용하기 위해서는
JSON.parse
역직렬화를 사용하여 이용하여야 합니다.
그렇다면 직렬화는 무엇일까요?
만약 javascript로 작업한 데이터를 python 사용자에게 전달하고 싶다면 어떻게 해야 할까요?
javascript 에서 직렬화 하는 코드는 아래와 같습니다.
JSON.stringify()
이처럼 JSON은 프로그래밍 언어와 프레임워크에 독립적이므로, 서로 다른 언어간에 데이터를 교환하기가 좋습니다.
주로 API의 반환형식, 시스템을 구성하는 설정파일에 활용이 됩니다.
ex) 업비트의 API
https://docs.upbit.com/reference
ex) package.json
https://docs.npmjs.com/cli/v9/configuring-npm/package-jso