728x90
728x90
준비물
1) Gson
1. https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.9에서 jar 다운받기
2. 해당 프로젝트의 [Properties]로 들어가서 [Libraries] 탭 → [Modulepath] 선택
3. 오른쪽의 [Add External JARs...] → jar 파일 선택
4. 해당 프로젝트의 'module-info.java' 파일로 들어가서 아래 코드 입력
1 2 3 4 | module 프로젝트명 { requires com.google.gson; opens 패키지명; // 지정된 패키지 } | cs |
2) Json 연습용 데이터 사이트 : https://jsonplaceholder.typicode.com/users
사이트에서 데이터 읽어오기
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 | // base url : https://jsonplaceholder.typicode.com/ // end point : todos URL url = new URL("https://jsonplaceholder.typicode.com/users"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.connect(); // Get 방식으로 요청 // 응답 int statusCode = conn.getResponseCode(); // 404 : 통신 약속 (통신이 실패했다는 의미) System.out.println("statusCode : " + statusCode); // 200 : 통신 약속 (통신이 성공했다는 의미) // IO // conn.getInputStream() : 1 byte씩 데이터를 읽음 (읽기 대상 : url) // BufferedReader() : 한 줄씩 데이터를 읽음 (\n 전까지) BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(); String line = null; // reader.readLine()은 null을 만나면 더 이상 읽을 데이터가 없다는 뜻 while (( line = reader.readLine() ) != null) { sb.append(line + "\n"); // 문자열 더하기 } String resultStr = sb.toString(); // StringBuffer를 String 타입으로 변환 | cs |
JSON 데이터를 담을 클래스 설계
- JSON 객체 내에 또다른 JSON 객체가 값으로 존재한다면, 따로 클래스로 정의해서 멤버 변수로 지정함
→ inner 클래스로 사용할 경우, static 키워드를 추가해주어야 함에 유의
더보기
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 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | public class User { private int id; private String name; private String username; private String email; private Address address; private String phone; private String website; private Company company; public static class Address { private String street; private String suite; private String city; private String zipcode; private Geo geo; public static class Geo { private String lat; private String lng; public String getLat() { return lat; } public void setLat(String lat) { this.lat = lat; } public String getLng() { return lng; } public void setLng(String lng) { this.lng = lng; } @Override public String toString() { return "Geo [lat=" + lat + ", lng=" + lng + "]"; } } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getSuite() { return suite; } public void setSuite(String suite) { this.suite = suite; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getZipcode() { return zipcode; } public void setZipcode(String zipcode) { this.zipcode = zipcode; } public Geo getGeo() { return geo; } public void setGeo(Geo geo) { this.geo = geo; } @Override public String toString() { return "Address [street=" + street + ", suite=" + suite + ", city=" + city + ", zipcode=" + zipcode + ", geo=" + geo + "]"; } } public static class Company { private String name; private String catchPhrase; private String bs; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCatchPhrase() { return catchPhrase; } public void setCatchPhrase(String catchPhrase) { this.catchPhrase = catchPhrase; } public String getBs() { return bs; } public void setBs(String bs) { this.bs = bs; } @Override public String toString() { return "Company [name=" + name + ", catchPhrase=" + catchPhrase + ", bs=" + bs + "]"; } } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public Company getCompany() { return company; } public void setCompany(Company company) { this.company = company; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", username=" + username + ", email=" + email + ", address=" + address + ", phone=" + phone + ", website=" + website + ", company=" + company + "]"; } } | cs |
생성할 JSON 객체가 하나인 경우
1 2 3 4 | Gson gson = new Gson(); // gson.fromJson("파싱해야 할 문자열", 클래스); // 리플렉션 기법 (동적) : 컴파일 시점에 만들지 않고, 실행 시점에 만듦 User user = gson.fromJson(sb.toString(), User.class); | cs |
생성할 JSON 객체가 여러 개인 경우 (ArrayList 활용)
1 2 | Type listType = new TypeToken<List<User>>(){}.getType(); ArrayList<User> userList = gson.fromJson(str, listType); | cs |
기타 메모
- 통신 약속
1) 200 : 통신 성공
2) 404 : 요청 URL이 없어서 통신 실패
- 리플렉션 기법 : 컴파일 시점에 만들지 않고, 실행 시점에 데이터 타입을 만듦
320x100
반응형
'Java > Base' 카테고리의 다른 글
[Java] 래퍼 클래스 (Wrapper class) (0) | 2023.03.22 |
---|---|
[Java] 웹 페이지의 JSON을 가져와 DB 테이블에 삽입하기 (0) | 2023.03.16 |
[Java] JSON (0) | 2023.03.15 |
[Java] Statement와 PreparedStatement (1) | 2023.03.12 |
[Java] Java로 SQL CRUD 구현하기 (0) | 2023.03.09 |