이번에는 C#에서 JSON 형태로 데이터를 읽고 쓰는 방법에 대하여 알아보겠습니다.
환경은 Visual Studio 2019 에서 작업하였습니다.
먼저 라이브러리를 참조 추가해야 하는데 이 곳에서 진행합니다.
Nuget 패키지 관리로 들어간 후 찾아보기 탭으로 들어가면 여러 패키지들이 나타나는데
검색창에 json 이라고 입력 후 Newtonsoft.Json 이라고 되어있는 항목을 클릭합니다.
클릭하면 오른쪽에 현재 프로젝트가 나타나는데 라이브러리를 설치할 프로젝트를 선택하고
설치 버튼을 눌러 설치를 진행합니다. 저는 이미 설치가 되어있어 화면과 살짝 다를 수 있습니다.
설치를 성공적으로 끝냈다면 위와 같이 참조 목록에 Newtonsoft.Json 항목이 추가 될 것입니다.
이제 JSON을 사용할 준비가 되었습니다.
상단에 다음과 같이 using 문을 추가해줍니다.
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using 문이 추가되었으면 먼저 쓰는 부분을 아래의 코드를 통하여 확인해 보겠습니다.
파일 생성은 Text를 쓰면서 만들어지므로 이 곳외에 별도로 언급하지 않습니다.
string path = Application.StartupPath + @"\Config.json";
string[] userList = new string[4] { "USER1", "USER2", "USER3", "USER4" };
string users = string.Empty;
JObject configData = new JObject(
new JProperty("IP", "127.0.0.1"),
new JProperty("PORT", "8088"),
new JProperty("DATABASE", "DB TEST"),
new JProperty("ID", "TestID"),
new JProperty("PASSWORD", "1234")
);
// Jarray 로 추가
configData.Add("USERS", JArray.FromObject(userList));
// 파일 생성 후 쓰기
File.WriteAllText(path, configData.ToString());
- 먼저 내용을 Write 할 Json 파일의 경로와 이름을 지정해줍니다.
- 그 다음 배열 형태로 JProperty를 추가하기 위하여 string[]을 선언하고 값을 추가해줍니다.
- users 변수는 추후 JSON 파일을 읽어온 후 해당 데이터를 저장할 용도이므로 지금은 사용하지 않습니다.
- JObject 형식의 변수를 하나 만들어줍니다. 이 때 항목들을 같이 추가해 줄 것이므로 new JObject(...) 안에
JProperty를 (Key, Value) 값 쌍으로 구성하여 추가해줍니다.
- 위에 선언한 userList 변수를 JSON 파일에 저장하기 위하여 먼저 생성한 JObject 변수에 Add 해줍니다.
Add 할 때 안의 내용은 (Key, JArray.FromObject(Value)) 인 것입니다.
- 마지막으로 작성한 JObject를 파일에 써주기 위하여 File 클래스의 WriteAllText 함수로 JSON 파일을 생성해줍니다.
생성된 파일을 열면 아래와 같은 형태가 됩니다.
{ // configData 변수의 시작점
"IP": "127.0.0.1", // Property
"PORT": "8088", // Property
"DATABASE": "DB TEST", // Property
"ID": "TestID", // Property
"PASSWORD": "1234", // Property
"USERS": [ // Property (JArray)
"USER1",
"USER2",
"USER3",
"USER4"
]
} // configData 변수의 끝점
이해를 돕기위하여 주석을 추가하였습니다.
응용하다보면 해당 형태말고도 JArray 안에 JObject가 들어있는 형태도 있습니다.
그럴 때는 아래와 같은 방법으로 추가 해주면 됩니다.
JObject keyValue = new JObject(
new JProperty("key", "key1"),
new JProperty("value", "value1")
);
JArray destPropertiesArray = new JArray(keyValue);
JObject destObject = new JObject(
new JProperty("A", "a"),
new JProperty("B", "b"),
new JProperty("object", destPropertiesArray)
);
위와 같이 하였을 때의 결과는 다음과 같습니다.
{
"A": "a",
"B": "b",
"object": [
{
"key": "key1",
"value": "value1"
}
]
}
이제 JSON 파일을 읽는 부분에 대하여 알아보겠습니다.
읽는 것도 의외로 간단한데 JSON 파일을 읽으려면 JsonTextReader 클래스를 통해서 읽는 방법이 있습니다.
아래의 코드를 확인해 보겠습니다.
// Json 파일 읽기
using (StreamReader file = File.OpenText(path))
{
using (JsonTextReader reader = new JsonTextReader(file))
{
JObject json = (JObject)JToken.ReadFrom(reader);
// Config
config.Ip = json["Ip"].ToString();
config.Port = (int)json["Port"];
config.LogPath = json["LogPath"].ToString();
config.LogKeepDate = (int)json["LogKeepDate"];
}
}
- File 클래스의 OpenText 함수로 파일을 읽어와서 StreamReader 변수에 담습니다.
- 읽어온 파일을 JsonTextReader 클래스에 넣어 변수로 만듭니다.
- JToken 클래스의 ReadFrom 함수에 reader 변수를 넣고 JToken 형태로 읽은 다음 JObject로 형변환 해줍니다.
- JObject 변수에 [Key] 형태를 적용하여 값을 가져옵니다.
더 자세한 내용은 코드 적용 후 중단점을 찍어 디버깅 해보시면 감을 잡으실 수 있을것입니다.
위의 읽기 코드는 위의 생성 코드로 만든 파일을 열었다면 LogPath, LogKeepDate 항목이 없으므로
정상적으로 불러와지지 않을 것이지만 파일 로드에 따른 경험을 위하여 위와 같이 하였습니다.
정상적으로 불러오려면 LogPath → Database, LogKeepDate → ID와 같이 변경하여 불러올 수 있습니다.
이상으로 C#에서 JSON 형태로 파일에 쓰기, 파일 읽기에 대하여 알아보았습니다.
C# 여러 차원의 배열 길이 구하는 방법 (0) | 2022.08.24 |
---|---|
C# dll 파일을 외부에서 참조 추가 시 설명 보이게 하는 방법 (0) | 2022.07.19 |
C# WPF의 3D 관련 기능 간단 정리 (0) | 2022.07.05 |
C# DataTable 중복 값 제거 (0) | 2022.07.01 |
C# HttpWebRequest의 '이 verb-type으로 content-body를 보낼 수 없습니다.' 예외에 대한 정리 (0) | 2022.06.30 |
댓글 영역