상세 컨텐츠

본문 제목

C# JSON 형태로 데이터 읽기, 쓰기 (생성 포함)

프로그래밍/C#

by TickTack 2022. 7. 15. 17:12

본문

이번에는 C#에서 JSON 형태로 데이터를 읽고 쓰는 방법에 대하여 알아보겠습니다.

환경은 Visual Studio 2019 에서 작업하였습니다.

먼저 라이브러리를 참조 추가해야 하는데 이 곳에서 진행합니다.

 

* JSON 라이브러리 추가하기

 

 

Nuget 패키지 관리로 들어간 후 찾아보기 탭으로 들어가면 여러 패키지들이 나타나는데

검색창에 json 이라고 입력 후 Newtonsoft.Json 이라고 되어있는 항목을 클릭합니다.

 

 

클릭하면 오른쪽에 현재 프로젝트가 나타나는데 라이브러리를 설치할 프로젝트를 선택하고

설치 버튼을 눌러 설치를 진행합니다. 저는 이미 설치가 되어있어 화면과 살짝 다를 수 있습니다.

 

 

설치를 성공적으로 끝냈다면 위와 같이 참조 목록에 Newtonsoft.Json 항목이 추가 될 것입니다.

이제 JSON을 사용할 준비가 되었습니다.

 

상단에 다음과 같이 using 문을 추가해줍니다.

 

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

 

* JSON 파일 쓰기

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 파일을 읽는 부분에 대하여 알아보겠습니다.

읽는 것도 의외로 간단한데 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 형태로 파일에 쓰기, 파일 읽기에 대하여 알아보았습니다.

관련글 더보기

댓글 영역