danbibibi
article thumbnail
Published 2023. 12. 26. 11:09
json-c 정리 언어/C, C++

json-c

JSON 객체를 C로 쉽게 구성하고

JSON 포맷된 문자열로 출력하여

JSON 포맷된 문자열을 다시 JSON 객체의 C 표현으로 파싱할 수 있는

reference counting object model을 구현하는 라이브러리

 

Install

(e.g. Ubuntu 16.04.2 LTS)

$ sudo apt install libjson-c-dev libjson-c3
$ vi src/main.cpp
$ g++ src/main.cpp -ljson-c
$ ./a.out

 

// main.cpp

#include <iostream>
#include <json-c/json.h>

using namespace std;

int main(int argc, char **argv)
{
    json_object *myobj, *dataobj;

    // 메모리 할당
    myobj = json_object_new_object();
    dataobj = json_object_new_object();

    json_object_object_add(dataobj, "test1", json_object_new_int(1));
    json_object_object_add(dataobj, "test2", json_object_new_string("TEST2"));
    json_object_object_add(myobj, "testData", dataobj);

    cout << "myobj.to_string() = " << json_object_to_json_string(myobj) << endl;

    // 메모리 해제
    json_object_put(dataobj);
    json_object_put(myobj);

    return(0);
}

 

json-c 사용

json-c를 사용하려면 json.h를 포함하거나 다음과 같은 보다 구체적인 헤더 파일 중 하나를 포함할 수 있음

#include <json-c/json.h>

json.h 다른 개별 헤더 대신 포함될 수 있는 편의 헤더
arraylist.h json_type_array 객체 작업을 위한 내부 메서드
json_object_get_array() 메서드 에 의해 노출되지만 직접 사용하는 것은 권장 x
json_c_version.h json-c 버전을 검색하는 메서드
json_inttypes.h 사용하지 마세요. json-c 내부는 언제든지 변경되거나 제거될 수 있습니다.
json_object.h 핵심 json-c API
json_object_iterator.h C++ 프로그래머에게 친숙한 스타일의 json_type_object 객체를 반복하기 위한 API
json_patch.h JSON 객체 조작을 위한 JSON 패치(RFC 6902) 구현
json_pointer.h json-c 개체 트리에서 개체를 검색하기 위한 JSON 포인터(RFC 6901) 구현
json_pointer_private.h 사용하지 마세요. json-c 내부는 언제든지 변경되거나 제거될 수 있습니다.
json_tokener.h 입력 문자열을 json_object 객체 트리로 구문 분석하는 메서드
json_types.h json-c의 몇몇 위치에서 사용되는 기본 유형이지만, "json_object.h"를 포함해야 함
json_util.h 기타 유틸리티 함수 및 매크로
json_visit.h 객체 트리를 탐색하는 메서드
linkhash.h json_type_object 객체 작업을 위한 내부 메서드
 json_object_get_object() 함수와 json_object_iter 유형 내 에서 노출되지만 직접 사용하는 것은 권장 x
printbuf.h 내부 문자열 버퍼 처리
json_object_set_serializer() 와 함께 사용하기 위해 json_object_to_json_string_fn 구현을 작성하지 않는 한 이를 직접 사용하는 것은 권장 x

 

기본적인 API

// array형식의 데이터(val)를 obj에 추가
int json_object_array_add(json_object *obj, json_object *val)

// array가 가지는 데이터 개수
int json_object_array_length(json_object *)  

// A object에 key 이름으로 B를 추가 (array도 object임)
void json_object_object_add(json_object *A, char* key, json_object*B) 

// array obj에 val을 추가
int json_object_array_add(json_object *obj, json_object *val)

// json object의 내용을 char *로 가져옴
char * json_object_to_json_string(json_object *) 

// obj에서 해당 key 값에 해당하는 것을 value에 넣음
json_bool json_object_object_get_ex(json_object *, char* key, json_object **value)

// obj의 string을 char*로 가져옴
char * json_object_get_string(json_object *)

// obj의 string의 길이를 가져옴
int json_object_get_string_len(json_object *)

// array obj가 가지는 길이를 가져옴
int json_object_array_length(json_object *)


// 반환값이 json_object* 인 함수
json_tokener_parse(char *) //문자열을 json형식으로 변경
json_object_new_object(void) //json_object를 생성
json_object_new_array() //array를 생성해서 json object로
json_object_new_int(int) //정수를 json object로
json_object_new_string(char*) //스트링을 json object로
json_object_new_string_len(char*, int) //스트링을 json object로
json_object_new_double(double) //double을 json object로
json_object_new_boolean(bool)  //bool값을 json object로
json_object_array_get_idx(json_object *obj, int idx)  //array obj[idx]의 json_object를 가져옴
json_object_get_int(json_object*) //obj를 int로
json_object_get_string(json_object*) //obj를 string으로
json_object_get_double(json_object*) //obj를 doublet로
json_object_get_boolean(json_object*) //obj를 bool값으로
json_object_object_foreach(json_object *obj, char *key, json_object *val) // obj에 있는 key 값의 개수 만큼 반복 수행
json_object_get_type(json_object *) //obj의 type을 가져옴 [null / boolean / double / int / array / object / string]

 

참고

 

GitHub - json-c/json-c: https://github.com/json-c/json-c is the official code repository for json-c. See the wiki for release t

https://github.com/json-c/json-c is the official code repository for json-c. See the wiki for release tarballs for download. API docs at http://json-c.github.io/json-c/ - GitHub - json-c/json-c: ...

github.com

 

'언어 > C, C++' 카테고리의 다른 글

[C++] stringstream  (0) 2024.01.02
RapidJSON 정리  (0) 2023.12.27
[C++] Standard Template Library - STL  (0) 2023.08.24
[C++] 객체 지향 프로그래밍  (0) 2023.08.16
[C++] new, delete  (0) 2023.08.14
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로