C에서 JSON 파일을 읽어들여서 사용할 수 있는 오픈소스코드이다.
들어가서 ZIP파일로 다운받고 압축을 풀면된다.
압축을 풀고 나서 나온 폴더 내부에 parson.c 와 parson.h를 복사해서
JSON 파일을 사용할 프로젝트 폴더에서 .c 파일과 .h파일들이 있는곳에 넣으면 된다.
사용할 JSON 파일도 역시 같은 폴더에 넣으면 된다.
example.json
{
"Num": 1,
"Greeting": "Hello",
"DNum": 1.5,
"array": [1,2,3,4,5],
"boolean": true
}
이렇게 되면 사용 준비는 마쳤다.
이제 사용할 프로젝트를 열어서 소스파일에 추가 > 기존 항목 > parson.c 를 해서 소스파일에 추가하고,
마찬가지로 헤더파일에도 추가 > 기존 항목 > parson.h 를 추가하면 된다.
이제, main.c 파일에 parson.h 헤더파일을 추가시켜주고 밑에처럼 코드를 작성한다.
JSON parson
#include <stdio.h>
#include "parson.h"
int main()
{
JSON_Value *rootValue;
JSON_Object *rootObject;
rootValue = json_parse_file("example.json");
rootObject = json_value_get_object(rootValue);
return 0;
}
위에 코드가 .json 파일을 파싱해서 객체를 가져오는 단계이다.
이제, JSON에서 파일들을 가져오기만 하면 된다.
JSON parson ex)
#include <stdio.h>
#include "parson.h"
int main()
{
JSON_Value *rootValue;
JSON_Object *rootObject;
rootValue = json_parse_file("example.json");
rootObject = json_value_get_object(rootValue);
printf("Greeting: %s\n", json_object_get_string(rootObject, "Greeting"));
printf("Num: %d\n", (int)json_object_get_number(rootObject, "Num"));
printf("DNum: %.1lf\n", json_object_get_number(rootObject, "DNum"));
printf("array: ");
JSON_Array *array = json_object_get_array(rootObject, "array");
for (int i = 0; i < json_array_get_count(array); i++)
{
printf("%d ", (int)json_array_get_number(array, i));
}
printf("\nboolean: %d\n", json_object_get_boolean(rootObject, "boolean"));
json_value_free(rootValue);
return 0;
}
(실행결과)
문자는 그대로 가져오면 되고,
기본적으로 숫자를 파싱해서 값을 가져올때는 실수형(double)로 가져오기때문에
정수를 가져오고 싶으면 형변환을 해줘서 가져와야한다.
배열은 json_object_get_array 함수를 이용해 먼저 배열의 포인터를 가져오고나서, json_object_get_count를 이용해서 배열의 요소 개수만큼 반복을 시키면, 배열을 가져올 수 있게 된다.
참, 거짓은 가져왔을때 각각 1, 0으로 바뀌게 된다.
그리고 동적 메모리를 사용하기 때문에 마지막에 동적 메모리를 해제 해줘야 한다.(rootValue)를 해제하면 자동으로 rootObject도 해제된다.
'C언어 > C_지식_정리' 카테고리의 다른 글
[C언어] This function or variable may be unsafe 에러 문제 해결 (0) | 2020.04.26 |
---|---|
[C 언어] 현재 콘솔창의 커서 위치 바꾸기 (0) | 2020.04.14 |
[C 언어] 현재 콘솔창의 커서 좌표 알아내기 (0) | 2020.04.14 |
[C 언어] 무작위로 숫자 생성하기 (난수 생성기) (0) | 2020.04.14 |