JSON(JavaScript Object Notation)
이미지 출처: https://www.json.org/json-ko.html
🖥️ JSON(JavaScript Object Notation)이란?
데이터를 저장하고 교환하기 위한 가벼운 데이터 형식.
사람이 쉽게 읽고 쓸 수 있으며, 기계가 쉽게 분석하고 생성할 수 있는 텍스트 기반의 데이터 표현 방식.
JSON은 JavaScript에서 파생되었지만, 언어 독립적으로 사용 가능.
🖥️ JSON을 사용하는 이유
💥 기존 XML 대비 JSON의 장점
- 구조가 단순하고 가독성이 높음
- 데이터 크기가 작아 네트워크 통신 속도가 빠름
- JavaScript 및 다양한 프로그래밍 언어에서 쉽게 다룰 수 있음
- 객체 및 배열을 자연스럽게 표현 가능
JSON은 웹 개발에서 서버와 클라이언트 간 데이터 교환에 널리 사용되며, REST API, 데이터 저장, 구성 파일 등에 활용됨.
🖥️ JSON 문법
📌 기본적인 JSON 문법 규칙:
- 키-값 쌍 (Key-Value Pairs): 데이터는
"키": 값
형식으로 표현됨 - 중괄호
{}
: 객체(Object)를 나타냄 - 대괄호
[]
: 배열(Array)을 나타냄 - 문자열은 큰따옴표
""
로 감싸야 함
📌 JSON 예제
{
"name": "박서팔",
"age": 30,
"isStudent": true,
"skills": ["C++", "C#", "JAVA", "PHP"],
"address": {
"city": "Seoul",
"country": "Korea"
}
}
📌 JSON에서는
true
,false
,null
값도 사용 가능.
🖥️ JSON 데이터 다루기
🔹 JavaScript에서 JSON 사용
const jsonData = '{ "name": "홍길동", "age": 25 }';
const obj = JSON.parse(jsonData); // JSON → 객체 변환
console.log(obj.name); // 홍길동
const newJson = JSON.stringify(obj); // 객체 → JSON 변환
console.log(newJson); // '{ "name": "홍길동", "age": 25 }'
🔹 Python에서 JSON 사용
import json
data = '{"name": "홍길동", "age": 25}'
parsed_data = json.loads(data) # JSON → 객체 변환
print(parsed_data["name"]) # 홍길동
json_string = json.dumps(parsed_data) # 객체 → JSON 변환
print(json_string)
🔹 C++에서 JSON 사용 (nlohmann/json 라이브러리)
#include <iostream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;
using namespace std;
int main() {
json obj = {
{"name", "홍길동"},
{"age", 25},
{"skills", {"C++", "Java", "Python"}}
};
cout << obj.dump(4) << endl; // JSON 출력
return 0;
}
🖥️ JSON을 사용할 수 있는 곳
| 사용 분야 | 설명 | |———-|——| | 웹 개발 | REST API를 통한 서버-클라이언트 간 데이터 전송 | | 데이터 저장 | 설정 파일, 로그 파일 등 | | 게임 개발 | 게임 설정, 캐릭터 데이터 저장 | | IoT | 센서 데이터 교환 |
📌 언리얼 엔진에서도 JSON 사용 가능!
#include "Json.h"
void SaveJson()
{
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
JsonObject->SetStringField("name", "Unreal Engine");
JsonObject->SetNumberField("version", 5.3);
FString OutputString;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&OutputString);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
UE_LOG(LogTemp, Warning, TEXT("Generated JSON: %s"), *OutputString);
}
🖥️ JSON 사용 시 주의할 점
- JSON은 문자열 기반이므로 데이터 형식(type)을 명확히 다뤄야 함
- 보안 문제 주의: 신뢰할 수 없는 JSON 데이터는 반드시 검증해야 함
- 문자열 속 큰따옴표(
"
) 사용에 유의 - JSON은 주석을 지원하지 않음 (단, JSON5 확장 사용 가능)
출처 :
* https://www.json.org/json-ko.html
* https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON
* https://www.w3schools.com/js/js_json.asp
* https://nlohmann.github.io/json/
* https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/JSON/