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
반응형
'데이터 과학 > 데이터 과학' 카테고리의 다른 글
KL Divergence(Kullback Leibler Divergence) 설명 (0) | 2021.11.01 |
---|---|
Density Estimation (in Python) (0) | 2021.03.26 |
[MIT] 데이터 사이언스 기초 강의 요약[11 ~ 15강] (0) | 2020.11.29 |
[MIT] 데이터 사이언스 기초 강의 요약[6 ~ 10강] (0) | 2020.11.08 |
[MIT] 데이터 사이언스 기초 강의 요약[1 ~ 5강] (0) | 2020.08.28 |