[C# 문법] C# JSON 파일 생성, 쓰기, 읽기

안녕하세요.

 

오늘은 C# 에서 JSON 파일에 대해서 다뤄 보려고 합니다.

 

JSON 이란?

 

-     JavaScript Object Notation 라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 Data 교환 형식이라고 합니다.

-     최근에는 JSONXML을 대체해서 데이터 전송 등에 많이 사용한다고 합니다.

 

그럼 C#에서 JSON 파일 생성, 쓰기, 읽는 예제 프로그램을 만들어 보도록 하겠습니다.

 

예제 프로그램은 윈폼으로 만들도록 하겠습니다.

 

먼저 아래와 같이 빈 윈폼 프로젝트를 생성해 주시고, Button 컨트롤 3개를 배치해 주시기 바랍니다.

 

빈 윈폼 프로젝트 및 컨트롤 배치

 

위와 같이 3개의 버튼 컨트롤을 배치해 주시기 바랍니다. 그리고 각 버튼 별로 Create JSON, Write JSON, Read JSON 이라고 이름을 설정해 주시기 바랍니다.

 

그리고 3개의 버튼 아래에는 RichTextBox 컨트롤 하나를 배치해 주시기 바랍니다.

 

RichTextBox 컨트롤의 역할은 JSON 파일을 생성 후, Write, Read 동작이 제대로 했는지 확인하기 위해서 컨트롤 배치를 하였습니다.

 

그럼 이제 각 버튼 별 기능이 제대로 동작 되도록 예제 코드를 작성해 보도록 하겠습니다.

 

그 전에 먼저, C# 에서 JSON 파일을 사용하려면 Nuget에서 Newtonsoft.Json 이라는 패키지를 설치하여야 합니다.

 

Newtonsoft.Json Nuget 설치

위와 같이 “Newtonsoft.Json” 패키지를 설치해 주시기 바랍니다.

 

그리고 아래 예제 코드를 작성해 주시기 바랍니다.

 

예제 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
 
namespace JsonTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            //이벤트 선언
            InitEvent();
        }
 
        /// <summary>
        /// 이벤트 선언 메서드
        /// </summary>
        private void InitEvent()
        {
            uiBtn_CreateJson.Click += UiBtn_CreateJson_Click;
            uiBtn_WriteJson.Click += UiBtn_WriteJson_Click;
            uiBtn_ReadJson.Click += UiBtn_ReadJson_Click;
        }
 
        /// <summary>
        /// JSON Read 버튼 클릭 이벤트 핸들러
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UiBtn_ReadJson_Click(object sender, EventArgs e)
        {
            uiRtb_Text.Clear();
            ReadJson();
        }
 
        /// <summary>
        /// JSON Write 버튼 클릭 이벤트 핸들러
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UiBtn_WriteJson_Click(object sender, EventArgs e)
        {
            uiRtb_Text.Clear();
            WrtieJson();
        }
 
        /// <summary>
        /// JSON Create 버튼 클릭 이벤트 핸들러
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UiBtn_CreateJson_Click(object sender, EventArgs e)
        {
            CreateJson();
        }
 
        /// <summary>
        /// JSON 파일 생성 메서드
        /// </summary>
        private void CreateJson()
        {
            string path = @"C:\test\test.json";
 
            if (!File.Exists(path))
            {
                using (File.Create(path))
                {
                    MessageBox.Show("파일 생성 성공");
                }
            }
            else
            {
                MessageBox.Show("이미 파일이 존재 합니다.");
            }
        }
 
        /// <summary>
        /// JSON 파일 쓰기 메서드
        /// </summary>
        private void WrtieJson()
        {
            string path = @"C:\test\test.json";
 
            //json 파일이 존재 한다면
            if (File.Exists(path))
            {
                InputJson(path);
            }
        }
 
        /// <summary>
        /// Json 내용 입력
        /// </summary>
        private void InputJson(string path)
        {
            //사용자 정보 배열로 선언
            var users = new[] { "USER1""USER2""USER3""USER4" };
            
            JObject dbSpec = new JObject(
                new JProperty("IP""127.0.0.1"),
                new JProperty("ID""BEOMBEOMJOJO"),
                new JProperty("PW""1234"),
                new JProperty("SID""TEST"),
                new JProperty("DATABASE""TEST")
                );
 
            //Jarray 로 추가
            dbSpec.Add("USERS", JArray.FromObject(users));
 
            File.WriteAllText(path, dbSpec.ToString());
 
            //텍스트 박스에 출력
            uiRtb_Text.Text = dbSpec.ToString();
        }
 
        /// <summary>
        /// JSON 파일 내용 추출 및 읽어오는 메서드
        /// </summary>
        private void ReadJson()
        {
            string jsonFilePath = @"C:\test\test.json";
            string str = string.Empty;
            string users = string.Empty;
 
            //// Json 파일 읽기
            using (StreamReader file = File.OpenText(jsonFilePath))
            using (JsonTextReader reader = new JsonTextReader(file))
            {
                JObject json = (JObject)JToken.ReadFrom(reader);
 
                DataBase _db = new DataBase();
 
                _db.IP = (string)json["IP"].ToString();
                _db.ID = (string)json["ID"].ToString();
                _db.PW = (string)json["PW"].ToString();
                _db.SID = (string)json["SID"].ToString();
                _db.DATABASE = (string)json["DATABASE"].ToString();
 
                var user = json.SelectToken("USERS");
                var cnt = user.Count();
 
                for(int idx = 0; idx < user.Count(); idx++)
                {
                    var name = user[idx].ToString();
 
                    if(idx == 0)
                    {
                        users += $"{name}";
                    }
                    else
                    {
                        users += $" , {name}";
                    }
                }
 
                str = $" IP : {_db.IP}\n ID : {_db.ID}\n PW : {_db.PW}\n SID :" +
                    $" {_db.SID}\n DATABASE : {_db.DATABASE}\n USERS : {users}";
                uiRtb_Text.Text = str;
            }
        }
    }
 
    public class DataBase
    {
        public string IP = string.Empty;
        public string ID = string.Empty;
        public string PW = string.Empty;
        public string SID = string.Empty;
        public string DATABASE = string.Empty;
    }
}
 
cs
실행 결과
서식3 제목 JSON 파일 생성

 

JSON 파일 쓰기

 

JSON 파일 파싱 및 읽기

위와 같이 JSON 파일 생성, 쓰기, 파싱 및 읽기의 동작들이 제대로 동작하는 것을 확인하실 수 있습니다.

 

향후에 JSON을 공공데이터 포털에서 API로 받아와서 파싱하는 방법도 포스팅 하도록 하겠습니다.

 

감사합니다.^^

728x90

이 글을 공유하기

댓글(11)

Designed by JB FACTORY