반응형

C++은 변수처리시 String 과 Int 의 변수 처리에 엄격함이 있고, 이로 인하여 Json 파싱시 각 Type 별 예외처리가 없다면,

Crash 가 발생할 확률이 높습니다. 그렇기에 Json 파싱시 경우의 수에 대한 예외처리가 필요하며, 이를 편하게 하기 위한 라이브러리들을 리뷰 해 보도록 할게요~

 

C++에서 JSON 데이터를 안전하게 처리하는 방법은 JSON 라이브러리를 활용하여 예외 처리, 데이터 유효성 검사, 타입 체크 등을 통해 구현할 수 있습니다. 일반적인 방법과 더불어 각 라이브러리에서 제공하는 기능을 사용하여 JSON 데이터를 안전하게 다루는 구체적인 예를 아래에 자세히 설명하겠습니다.

 

1. nlohmann/json 라이브러리

  • 특징: nlohmann/json 라이브러리는 직관적인 문법과 다양한 JSON 데이터 구조 지원으로 많이 사용됩니다.
  • 예외 처리 및 안전한 접근: JSON 파싱 및 데이터 접근에서 발생할 수 있는 오류를 예외 처리로 관리할 수 있습니다.

설치

  • nlohmann/json.hpp 헤더 파일을 프로젝트에 추가하거나, 패키지 관리자를 통해 설치할 수 있습니다 (예: vcpkg install nlohmann-json).

JSON 파싱 예제

 

  • contains 메서드: JSON 데이터가 특정 키를 포함하고 있는지 확인하여 접근 오류를 방지합니다.
  • 타입 체크: .is_string(), .is_number_integer() 등의 메서드를 사용해 값의 타입을 확인하여 안전성을 높입니다.
  • 예외 처리: json::parse_error, json::type_error 등을 통해 다양한 오류 상황을 예외로 처리할 수 있습니다.

 

2. rapidjson 라이브러리

  • 특징: rapidjson은 속도가 매우 빠르며, 메모리 효율이 높아 임베디드 시스템 등에서 많이 사용됩니다.
  • 데이터 접근 전 검증: HasMember와 IsType 메서드를 통해 안전하게 데이터를 다룰 수 있습니다.

설치

  • rapidjson은 헤더 파일로 구성되어 있어 프로젝트에 간단히 추가할 수 있습니다.

JSON 파싱 예제

  • HasMember: JSON 객체에 특정 키가 있는지 확인하여 접근 오류를 방지합니다.
  • 타입 체크: .IsString(), .IsInt() 등의 메서드를 사용하여 데이터 타입을 검증합니다.
  • 오류 검출: Parse 메서드를 통해 JSON 데이터 파싱 시 오류를 확인합니다.

3. picojson 라이브러리

  • 특징: picojson은 작은 크기의 C++ JSON 라이브러리로, 단순한 JSON 작업에 적합합니다.
  • 안전한 데이터 접근: 예외 처리보다는 JSON 데이터 존재 여부와 타입을 사전에 검사하여 안전하게 데이터를 다룹니다.

설치

  • picojson.h 파일을 프로젝트에 추가하면 됩니다.

JSON 파싱 예제

 

 

안전한 JSON 파싱을 위한 일반적인 접근 방법

  1. JSON 구조 검증: JSON 데이터가 원하는 형식을 가지고 있는지 확인합니다.
  2. 키와 타입 존재 여부 검사: 특정 키가 존재하고, 예상한 타입인지 확인합니다.
  3. 예외 처리: 예외를 발생시킬 수 있는 상황에서 try-catch 블록을 통해 안전하게 예외를 처리합니다.
  4. 오류 메시지 및 로그 관리: 오류가 발생할 경우, 사용자에게 의미 있는 오류 메시지를 제공하거나 로그에 기록합니다.

이처럼 C++에서 JSON 데이터를 안전하게 처리하기 위해 다양한 라이브러리와 기법을 활용할 수 있습니다.

 

+ Recent posts