본문 바로가기

데이터 과학/데이터 과학

JSON (JavaScript Object Notation) in C

Json 파일 읽어 들이기

//Allocation
struct json_object* json_object_from_file(const char* filename)	

//e.g.
struct json_object *pJsonroot = NULL;
pJsonroot = json_object_from_file(pPath);

//Free
json_object_put(pJsonroot);

파일 경로(string)참고하여 json 읽어 들이고 json_object 포인터 반환.

이후 json_object_put을 이용해 해제 해줘야 한다.

 

Json 파일 파싱하기

struct       json_object* json_object_object_get(struct json_object* obj, const char* key)
int32_t      json_object_get_int (struct json_object *obj)
const char * json_object_get_string (struct json_object *obj)
struct       json_object* json_object_array_get_idx(struct json_object *obj, int idx)

//e.g.
json_object *pJ = NULL;
json_object *pArr = NULL;
uint8 *pStr = NULL
uint32 uValue;

pJ = json_object_object_get(pRoot, "Key"); // json_object와 관련된 값을 추출한다.

pStr = json_object_get_string(pJ);         // json object에서 string을 추출한다.
uValue = json_object_get_int(pJ);          // json object에서 int를 추출한다.
pArr = json_object_arr_get_idx(pJ);        // array type의 json object에서 index를 추출한다.

key(string)에 대응하는 value 값을 읽어 들인다.

이때 반환값(pJ, pStr)는 Value 위치로 이동할 뿐이다. 값을 복사하기 위해서는 Memcopy를 따로 구현해야 한다.

 

Json 값 추가하기

struct json_object* json_object_new_object(void)
/*
    새로운 json_object 생성(reference count 1)
    e.g. struct json_object *pJR = json_object_new_object(); 다음과 같이 생성하면,
    pJR를 기준으로 값을 추가한다.
*/

void json_object_object_add(struct json_object* obj, const char* key, struct json_object* val)
/*
 json_object 에 key, val를 속성으로 하는 딕셔너리를 추가한다.
*/

struct json_object* json_object_new_string_len(const char* s, int len)	
/*
  string 추가하고자 할 경우
  e.g. json_object *pJ = json_object_new_string_len(문자열을 저장하고 있는 위치, 길이)
      json_object_object_add(pJR, "문자열 Key", pJ)
*/

struct json_object* json_object_new_int(int32_t	i)
/*
 int 추가하고자 할 경우
 e.g. json_object *pJ = json_object_new_int(정수 저장 변수)
      json_object_object_add(pJR, "정수 Key", pJ)
*/

struct json_object* json_object_new_array(void)
/*
  배열을 추가하고자 할 경우
  e.g. json_object *pArr = json_object_new_array()
  json_object_array_add(pArr, pJR2);
  여기서 pJR2는 struct json_object *pJR2 = json_object_new_object(); 로서
  값을 넣을 수 있는 새로운 딕셔너리가 된다.
  for문을 사용하여 담게 되면 pArr = [pJR1, pJR2, pJR3, ..., pJRn] 다음과 같이 담기게 된다.
*/

 

Json 파일 쓰기

int json_object_to_file	(const char* filename, struct json_object* obj)	
// json_object_to_file_ext(filename, obj, JSON_C_TO_STRING_PLAIN) 와 동일한 의미
// 파일 쓰는 것이 실패할 경우 -1 리턴


int json_object_to_file_ext(const char* filename, struct json_object* obj, int flags)
// file을 열어 json_object를 문자열로 바꾼뒤 파일에 쓴다.

 

 

[Reference]

json-c.github.io/json-c/json-c-0.10/doc/html/json__object_8h.html#ac11730ad909d1f9eb077d1ce9ff8b153

반응형