Programming/C

cJSON을 활용한 JSON 파싱

moxie2ks 2025. 3. 25. 18:01
728x90
반응형

개요

JSON(JavaScript Object Notation)은 데이터 교환 형식으로 널리 사용되며, 그 단순함과 가독성 때문에 인기가 높다. C언어에서 JSON을 처리하기 위해서는 별도의 라이브러리가 필요한데, 그 중 cJSON은 가볍고 사용하기 쉬운 라이브러리로 널리 활용된다. 이 글에서는 cJSON 라이브러리를 사용하여 C언어에서 JSON 데이터를 파싱하는 방법에 대해 살펴본다.

설명

cJSON은 Dave Gamble이 개발한 C언어용 경량 JSON 파싱 라이브러리이다. 단일 C 파일과 헤더 파일로 구성되어 있어 프로젝트에 쉽게 통합할 수 있다. cJSON은 JSON 데이터를 파싱하고 생성하는 기능을 제공하며, 메모리 관리도 단순하게 설계되어 있다.

cJSON의 주요 특징은 다음과 같다:

  • 가벼운 구현: 단일 C 파일과 헤더로 구성
  • 직관적인 API: 쉽게 학습하고 사용할 수 있는 함수들 제공
  • JSON 파싱 및 생성 기능 제공
  • 메모리 할당 및 해제를 위한 명확한 함수 제공

특징

cJSON을 사용한 JSON 파싱의 주요 특징은 다음과 같다:

  1. 트리 구조 표현: cJSON은 JSON 데이터를 트리 구조로 표현한다. 각 노드는 cJSON 구조체로 표현되며, 이를 통해 JSON의 계층적 구조를 쉽게 탐색할 수 있다.
  2. 타입 시스템: cJSON은 JSON의 다양한 데이터 타입(문자열, 숫자, 객체, 배열, 불린, null)을 지원하며, 각 타입에 맞는 접근 함수를 제공한다.
  3. 메모리 관리: cJSON_Parse() 함수로 파싱한 JSON 데이터는 cJSON_Delete() 함수를 사용하여 메모리를 해제해야 한다.
  4. 에러 처리: 파싱 과정에서 오류가 발생하면 NULL을 반환하고, cJSON_GetErrorPtr() 함수를 통해 오류 위치를 확인할 수 있다.
  5. 직렬화 기능: 파싱된 cJSON 객체를 다시 JSON 문자열로 변환할 수 있는 함수를 제공한다.

예제

다음은 cJSON을 사용하여 JSON 데이터를 파싱하는 간단한 예제이다:

c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"

int main() {
// JSON 문자열 예시
  const char *json_str = "{ \"key1\": \"value1\", \"key2\": \"value2\", \"key3\": { \"nested_key\": \"nested_value\" } }";

// JSON 문자열 파싱
  cJSON *json = cJSON_Parse(json_str);
  if (json == NULL) {
// 문제 발생 시 오류 처리
    const char *error_ptr = cJSON_GetErrorPtr();
    if (error_ptr != NULL) {
      fprintf(stderr, "Error: cJSON_Parse() failed before: %s\n", error_ptr);
    }
  } else {
// JSON 각 필드 값 출력
    cJSON *key1 = cJSON_GetObjectItem(json, "key1");
    printf("key1: %s\n", key1->valuestring);

    cJSON *key2 = cJSON_GetObjectItem(json, "key2");
    printf("key2: %s\n", key2->valuestring);

    cJSON *key3 = cJSON_GetObjectItem(json, "key3");
    cJSON *nested_key = cJSON_GetObjectItem(key3, "nested_key");
    printf("key3 > nested_key: %s\n", nested_key->valuestring);

// 메모리 해제
    cJSON_Delete(json);
  }

  return 0;
}
  • 이 코드는 cJSON 라이브러리를 사용하고 있으므로, 먼저 cJSON 라이브러리를 설치해야 한다.
  • cJSON 라이브러리 설치 방법과 사용법은 https://github.com/DaveGamble/cJSON 에서 확인 할 수 있다.

실행결과

결론

cJSON은 C언어에서 JSON 데이터를 파싱하고 생성하기 위한 강력하고 사용하기 쉬운 라이브러리이다. 단순한 구조와 직관적인 API 덕분에 복잡한 JSON 데이터도 효과적으로 처리할 수 있다. 특히 임베디드 시스템이나 리소스가 제한된 환경에서 유용하게 사용될 수 있다.

cJSON을 사용할 때는 메모리 관리에 주의해야 하며, 파싱된 데이터를 사용한 후에는 반드시 메모리를 해제해야 한다. 또한, 오류 처리를 적절히 구현하여 예상치 못한 입력에 대해서도 안정적으로 동작하도록 해야 한다.

JSON이 현대 소프트웨어 개발에서 중요한 데이터 교환 형식으로 자리 잡음에 따라, C언어에서도 cJSON과 같은 라이브러리를 활용하여 효율적으로 JSON 데이터를 처리할 수 있게 되었다. 이는 C언어로 작성된 애플리케이션이 웹 서비스, REST API 등과 쉽게 통합될 수 있도록 해준다.

참고문헌

  1. cJSON GitHub 저장소: https://github.com/DaveGamble/cJSON
  2. cJSON 문서: https://github.com/DaveGamble/cJSON/blob/master/README.md
  3. JSON 공식 웹사이트: https://www.json.org/json-en.html
728x90
반응형