JSON(JavaScript Object Notation)


이미지 출처: https://www.json.org/json-ko.html


🖥️ JSON(JavaScript Object Notation)이란?

데이터를 저장하고 교환하기 위한 가벼운 데이터 형식.
사람이 쉽게 읽고 쓸 수 있으며, 기계가 쉽게 분석하고 생성할 수 있는 텍스트 기반의 데이터 표현 방식.
JSON은 JavaScript에서 파생되었지만, 언어 독립적으로 사용 가능.


🖥️ JSON을 사용하는 이유

💥 기존 XML 대비 JSON의 장점

  1. 구조가 단순하고 가독성이 높음
  2. 데이터 크기가 작아 네트워크 통신 속도가 빠름
  3. JavaScript 및 다양한 프로그래밍 언어에서 쉽게 다룰 수 있음
  4. 객체 및 배열을 자연스럽게 표현 가능

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 사용 시 주의할 점

  1. JSON은 문자열 기반이므로 데이터 형식(type)을 명확히 다뤄야 함
  2. 보안 문제 주의: 신뢰할 수 없는 JSON 데이터는 반드시 검증해야 함
  3. 문자열 속 큰따옴표(") 사용에 유의
  4. 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/


© 2024. All rights reserved.

Powered by Hydejack v9.2.1