목차
- 이전 포스팅의 C 언어 json 자료구조 선언 후 키와 값 저장 예제 학습 링크
- 이전 포스팅의 C 언어 더블 포인터 Double Pointer 활용 예제 학습 링크
- 이전 포스팅의 C 언어 Codelite IDE에 opencv 라이브러리 링크 예제 학습 링크
- C 언어 Json Serialization 시리얼화된 json 문자열 파싱 예제
- C 언어 파싱 후 생성된 json context 출력 예제
이전 포스팅의 C 언어 json 자료구조 선언 후 키와 값 저장 예제 학습 링크
이전 포스팅에서는 c언어에서 json 자료구조를 선언하여 키와 값의 쌍 데이터를 저장하는 예제에 대해 알아보았습니다. json은 데이터를 식별할 수 있는 키와 실제 데이터를 가리키는 값을 저장할 수 있는 자료구조입니다. 파이썬 혹은 자바 언어에서는 dict, json 등의 구조로서 자료구조가 다양하게 존재합니다. 하지만 절차지향언어의 특성을 가진 c언어에서는 이러한 json 자료구조 사용에 있어서 제한이 따릅니다. 만약 c언어로 json 관리 프로그램을 개발하고 있으시다면 아래 링크의 포스팅을 참고하여 관련 내용을 학습해주세요.
[C 언어/C++] C 언어 포인터로 Json 자료구조 만들기 및 활용 예제 - 2(json 키, 값 추가 및 Serialization
목차 이전 포스팅의 C 언어 Json 자료구조 Context 생성 및 메모리 해제 예제 학습 링크 이전 포스팅의 C 언어 MariaDB Delete 쿼리 실행 및 결과 출력 예제 학습 링크 이전 포스팅의 C 언어 MariaDB Update 쿼
salguworld.tistory.com
이전 포스팅의 C 언어 더블 포인터 Double Pointer 활용 예제 학습 링크
다음으로 이전 포스팅에서는 c언어에서 더블 포인터를 활용하는 예제에 대해 알아보았습니다. 포인터는 c언어에서 사용되는 가장 큰 장점이며 어려운 자료구조입니다. 가상 메모리의 위치를 가리키는 자료구조로서 메모리 주소를 저장할 수 있습니다. 즉, 다른 변수 혹은 함수 등의 위치로 이동하여 값을 저장할 수 있는 변수입니다. double pointer는 이러한 포인터 변수의 주소를 다시 또 가리키는 포인터 변수를 의미합니다. 즉 위치를 가리키고 그 변수가 가리키는 또 다른 위치를 가리키는 이중 포인터 변수입니다. 만약 c언어에서 double pointer 더블 포인터 변수 활용 예제가 궁금하시다면 아래 링크를 참고해주세요.
2023.09.07 - [C] - [C/C++] 더블 포인터 활용 예제(Double Pointer Example, 2차원배열)
[C/C++] 더블 포인터 활용 예제(Double Pointer Example, 2차원배열)
목차 C 언어 함수 포인터 변수 활용 예제 이전 포스팅 참고 학습 C 언어 문자열 Hex 값 출력 및 16진수 변환 예제 이전 포스팅 참고 학습 C 언어 Hex 문자열을 바이트로 변환 예제 이전 포스팅 참고
salguworld.tistory.com
이전 포스팅의 C 언어 Codelite IDE에 opencv 라이브러리 링크 예제 학습 링크
마지막으로 이전 포스팅에서는 c언어에서 codelite IDE에 opencv 라이브러리를 링크하는 방법과 예제를 알아보았습니다. opencv는 그래픽 관련 라이브러리 함수입니다. 이미지를 조금더 낮은 레벨로 다룰 수 있는 여러 함수들을 제공합니다. 특히 동적으로 수학적 도형을 생성하여 화면에 출력하기 위해서는 이러한 opencv 라이브러리를 사용합니다. 최근에는 이미지 관련 ai 기술을 구현하기위해 opencv를 많이 사용합니다. 이미지의 점을 분석하여 사람 물체를 판단하거나 동물을 판단하는 등의 기술들을 만들 수 있습니다. c언어에서 opencv 라이브러리를 사용하기위해 codelite ide에 링크하는 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.09.07 - [C] - [C/C++] C 언어 Codelite에 opencv 라이브러리 링크 및 간단한 확인 예제
[C/C++] C 언어 Codelite에 opencv 라이브러리 링크 및 간단한 확인 예제
목차 리눅스 우분투 C 언어 개발도구 Codelite 설치 및 환경구성 예제 이전 포스팅 참고 학습 리눅스 우분투 C 언어 opencv 라이브러리 패키지 설치 예제 이전 포스팅 참고 학습 C 언어 네트워크 소켓
salguworld.tistory.com
C 언어 Json Serialization 시리얼화된 json 문자열 파싱 예제
아래는 c언어에서 json 자료구조를 Serialization 시리얼화하여 만든 Json 문자열을 다시 파싱하여 Json context에 데이터를 저장하는 예제입니다. 시리얼화하여 문자열로 변환하후 네트워크 통신 등에 사용하고 다시 상대방은 이러한 json 문자열을 객체로 변환하여 사용합니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Json 자료구조를 나타내는 구조체
typedef struct {
char* key;
char* value;
} JsonEntry;
// Json context를 나타내는 구조체
typedef struct {
JsonEntry* entries;
size_t size;
} JsonContext;
// Json context를 초기화하는 함수
void initializeJsonContext(JsonContext* context, size_t initialSize) {
context->entries = (JsonEntry*)malloc(initialSize * sizeof(JsonEntry));
context->size = initialSize;
}
// Json context에 새로운 항목을 추가하는 함수
void addJsonEntry(JsonContext* context, const char* key, const char* value) {
// 필요 시 동적으로 메모리를 확장
if (context->size == 0) {
context->size = 1;
context->entries = (JsonEntry*)malloc(context->size * sizeof(JsonEntry));
} else {
context->size++;
context->entries = (JsonEntry*)realloc(context->entries, context->size * sizeof(JsonEntry));
}
// 새로운 항목 추가
context->entries[context->size - 1].key = strdup(key);
context->entries[context->size - 1].value = strdup(value);
}
// Json context를 출력하는 함수
void printJsonContext(const JsonContext* context) {
printf("{\n");
for (size_t i = 0; i < context->size; ++i) {
printf(" \"%s\": \"%s\",\n", context->entries[i].key, context->entries[i].value);
}
printf("}\n");
}
// Json context를 해제하는 함수
void freeJsonContext(JsonContext* context) {
for (size_t i = 0; i < context->size; ++i) {
free(context->entries[i].key);
free(context->entries[i].value);
}
free(context->entries);
context->size = 0;
}
// Json 문자열을 파싱하여 Json context에 저장하는 함수
void parseJsonString(const char* jsonString, JsonContext* context) {
char* token;
char* rest = (char*)jsonString;
while ((token = strtok_r(rest, ",\"", &rest))) {
char* key = strtok_r(token, ":", &token);
char* value = strtok_r(NULL, ":", &token);
// 중괄호 제거
if (key[0] == '{') {
key++;
}
if (value[strlen(value) - 1] == '}') {
value[strlen(value) - 1] = '\0';
}
// 큰 따옴표 제거
key = strtok_r(key, "\"", &key);
value = strtok_r(value, "\"", &value);
// 새로운 항목 추가
addJsonEntry(context, key, value);
}
}
// 예제 사용
int main() {
// Json 문자열
const char* jsonString = "{\"name\":\"John Doe\",\"age\":\"25\",\"city\":\"New York\"}";
// Json context를 초기화하고 문자열 파싱
JsonContext parsedJsonContext;
initializeJsonContext(&parsedJsonContext, 0);
parseJsonString(jsonString, &parsedJsonContext);
// 파싱 후 생성된 context 출력
printf("Parsed Json Context:\n");
printJsonContext(&parsedJsonContext);
// 메모리 해제
freeJsonContext(&parsedJsonContext);
return 0;
}
C 언어 파싱 후 생성된 json context 출력 예제
아래는 c언어에서 json 문자열을 파싱하여 json context로 만든 후 내용들을 화면에 출력하느 예제입니다.