개발/개발 공통

[파일 형식] JSON 파일의 형식과 문법에 대해서

growing-dev 2023. 2. 11. 14:38

어디선가 자연스럽게 많이 보았던 JSON 파일에 대해서 알아본다. 실제로 프로그램에서 활용하는 읽어보는 것까지 알아보도록 한다.

JSON 파일의 형식과 문법에 대해서


JSON이 뭐지?

JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다. 웹 애플리케이션에서 데이터를 전송할 때 일반적으로 사용한다. JSON이 Javascript 객체 문법과 매우 유사하지만 딱히 Javascript가 아니더라도 JSON을 읽고 쓸 수 있는 기능이 다수의 프로그래밍 환경에서 제공된다. 확장자는. json으로 생성한다.

VS Code에서 JSON 확장 설치

가장 먼저 json 이라는 VS Code 확장을 설치했다. 제대로 활용하기 위해 요즘 확장의 도움을 받는 것은 필수인 것 같다.


JSON의 기본 구조

위에서 설명했듯이 JSON은 Javascript 객체 리터럴 문법을 따르는 문자열이다. JSON 안에는 마찬가지로 Javascript의 기본 데이터 타입인 문자, 숫자, 배열, bool 그리고 다른 객체를 포함할 수 있다. 

  • 각 데이터는 key: value 로 이루어진다.
  • 각 데이터는 , 로 연결된다.
  • 객체는 { } 로 묶는다.
  • 배열은 [ ] 로 묶는다.

test.json이라는 파일을 아래와 같이 생성해 보았다.

{
  "squadName": "Super hero squad",
  "homeTown": "Metro City",
  "formed": 2016,
  "secretBase": "Super tower",
  "active": true,
  "members": [
    {
      "name": "Molecule Man",
      "age": 29,
      "secretIdentity": "Dan Jukes",
      "powers": [
        "Radiation resistance",
        "Turning tiny",
        "Radiation blast"
      ]
    },
    {
      "name": "Madame Uppercut",
      "age": 39,
      "secretIdentity": "Jane Wilson",
      "powers": [
        "Million tonne punch",
        "Damage resistance",
        "Superhuman reflexes"
      ]
    },
    {
      "name": "Eternal Flame",
      "age": 1000000,
      "secretIdentity": "Unknown",
      "powers": [
        "Immortality",
        "Heat Immunity",
        "Inferno",
        "Teleportation",
        "Interdimensional travel"
      ]
    }
  ]
}

 

이 파일을 Javascript 프로그램에서 로드할 수 있다. 아래는 Javascript에서 위 파일을 읽은 뒤 데이터에 접근하는 예시이다.

.이나 [ ]을 활용해서 데이터를 접근할 수 있다. 두 번째 코드블록에서 처럼 접근하면 members -> 2번째 -> powers -> 3번째로 접근하는 것이라서 "Superhuman reflexes"가 될 것이다.

superHeroes.homeTown
superHeroes['active']
superHeroes['members'][1]['powers'][2]

 

 

 

JSON에서 배열 다루기

배열을 다루는 방식 또한 Javascript와 유사하다고 할 수 있다. [0]["powers"][1]로 접근하면 "Turning tiny"가 된다.

[
  {
    "name": "Molecule Man",
    "age": 29,
    "secretIdentity": "Dan Jukes",
    "powers": [
      "Radiation resistance",
      "Turning tiny",
      "Radiation blast"
    ]
  },
  {
    "name": "Madame Uppercut",
    "age": 39,
    "secretIdentity": "Jane Wilson",
    "powers": [
      "Million tonne punch",
      "Damage resistance",
      "Superhuman reflexes"
    ]
  }
]

 

기타 주의 사항들

  • JSON은 큰 따옴표만 사용해야 한다.
  • JSON 파일을 검사할 수 있는 확장 등을 통해 검사를 해야 프로그램의 오동작을 미리 방지할 수 있다.
  • JSON 파일은 순수한 데이터만을 표현할 수 있으므로 동작하는 메서드는 구현할 수 없다.


JSON 파일을 프로그램에서 읽어보기

작성한 JSON 파일을 프로그램에서 읽어서 활용하기 위한 방법에 대해서 알아본다. VS Code에서 수행했고 언어는 쉽게 Python을 활용했다.
json_read.py라는 파일을 생성했다. 우선 json을 import 한다. 위에서 작성했던 test.json을 read 하기 위해 file open을 하고 이를 json.load로 넘겨주면 dictionary 형태로 return 받는다. 이 data를 loop를 돌면서 key와 value를 출력하도록 작성했다.

import json

file = open("test.json")
data = json.load(file)

for key, value in data.items():
    print(key, ':', value)


아래와 같이 출력되었다.

/home/growing-dev/test/cmake-template/json_read.py 
squadName : Super hero squad
homeTown : Metro City
formed : 2016
secretBase : Super tower
active : True
members : [{'name': 'Molecule Man', 'age': 29, 'secretIdentity': 'Dan Jukes', 'powers': ['Radiation resistance', 'Turning tiny', 'Radiation blast']}, {'name': 'Madame Uppercut', 'age': 39, 'secretIdentity': 'Jane Wilson', 'powers': ['Million tonne punch', 'Damage resistance', 'Superhuman reflexes']}, {'name': 'Eternal Flame', 'age': 1000000, 'secretIdentity': 'Unknown', 'powers': ['Immortality', 'Heat Immunity', 'Inferno', 'Teleportation', 'Interdimensional travel']}]

결론

복잡하진 않지만 잘못 사용했다가 오류가 나기 쉬운 것이 파일이나 데이터를 다루는 것이 아닌가 싶다. 또 데이터를 어떻게 구성하느냐에 따라서 프로그램의 효율이나 업무의 생산성에도 영향을 주는 것 같다. 이전에 알아보았던 YAML와 JSON을 적절히 프로그램에 맞게 활용하는 경험이 좀 더 필요할 것 같다.

반응형