반응형
package jsonfile;
import java.util.List;
public class JsonVO {
private String 동명;
private String 설치주소;
private String 위치;
public JsonVO() {
super();
}
public JsonVO(String 동명, String 설치주소, String 위치) {
super();
this.동명 = 동명;
this.설치주소 = 설치주소;
this.위치 = 위치;
}
public String get동명() {
return 동명;
}
public void set동명(String 동명) {
this.동명 = 동명;
}
public String get설치주소() {
return 설치주소;
}
public void set설치주소(String 설치주소) {
this.설치주소 = 설치주소;
}
public String get위치() {
return 위치;
}
public void set위치(String 위치) {
this.위치 = 위치;
}
@Override
public String toString() {
return "JsonVO [동명=" + 동명 + ", 설치주소=" + 설치주소 + ", 위치=" + 위치 + "]";
}
}
Json 파일을 객체로 받아줄 VO class 생성
package jsonfile;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class ReadJsonFile {
static ArrayList<JsonVO> list = new ArrayList<>();
public static void Read() {
JSONParser parser = new JSONParser();
JSONArray array;
JsonVO jvo;
try {
FileReader reader = new FileReader("abc.json");
array = (JSONArray)parser.parse(reader);
for(int i = 0 ; i < array.size(); i++) {
JSONObject obj = (JSONObject)array.get(i);
Iterator<?> it = obj.keySet().iterator();
jvo = new JsonVO();
while(it.hasNext()) {
String key = (String) it.next();
if(key.equals("동명"))jvo.set동명((String)obj.get(key));
else if(key.equals("설치주소"))jvo.set설치주소((String)obj.get(key));
else if(key.equals("위 치"))jvo.set위치((String)obj.get(key));
}
list.add(jvo);
}
reader.close();
} catch (IOException | ParseException e) {
e.printStackTrace();
}
}
}
Jason파일을 읽어와서 만들어준 VO instance에 담아 VO istance를 list에 추가
package java_1101;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.*;
public class RestJsonExample {
public static void main(String[] args) throws Exception {
StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/6410000/GOA/GOA001"); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=jJ%2F7eW0YlYtBAyPaD%2FKzkGdJ5hGzdDIc6BUEyJyc02KYC3ysb4HivMFrzlmbFM9D7xdAoBpe64OOm2X7jEJ4bA%3D%3D"); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("type","UTF-8") + "=" + URLEncoder.encode("json", "UTF-8")); /*응답결과json, xml구분*/
urlBuilder.append("&" + URLEncoder.encode("numOfRows","UTF-8") + "=" + URLEncoder.encode("100", "UTF-8")); /*한 페이지 결과 수*/
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*페이지 번호*/
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
System.out.println("Response code: " + conn.getResponseCode());
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
value = sb.toString();
// JSONParser에 JSON데이터를 넣어 파싱한 다음 JSONObject로 반환한다.
JSONObject objData = (JSONObject)new JSONParser().parse(value);
// JSONObject에서 Array데이터를 get하여 JSONArray에 저장한다.
JSONArray arrData = (JSONArray)objData.get("items");
// 배열 데이터 출력하기
JSONObject tmp;
JSONArray tmpArr;
StringBuilder sb2= new StringBuilder();
for(int i=0; i<arrData.size(); i++){
tmp = (JSONObject)arrData.get(i);
sb.append("area("+i+"): " + tmp.get("area")+"\n");
sb.append("name("+i+"): " + tmp.get("name")+"\n");
// Array데이터 안에 Array 데이터 꺼내기
// tmpArr = (JSONArray)tmp.get("items");
// sb.append("genres("+i+"): ");
// for(int j=0; j<tmpArr.size(); j++){
// sb.append(j+"." + tmpArr.get(j));
// if(j!=tmpArr.size()-1) sb.append(", ");
// }
sb.append("\n");
}
System.out.println(sb.toString());
BufferedOutputStream bs = null;
Date d = new Date();
try {
bs = new BufferedOutputStream(new FileOutputStream("C:\\Users\\user\\Desktop\\jsonEx\\Sample.txt"));
String str = d + sb.toString();
bs.write(str.getBytes()); //Byte형으로만 넣을 수 있음
} catch (Exception e) {
e.getStackTrace();
// TODO: handle exception
}finally {
bs.close();
}
}
// jsonData
static String value;
}
URL에 주어진 json파일을 불러와서 저장하는 방법
package jsonfile;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import com.fasterxml.jackson.databind.ObjectMapper;
public class WriteJsonFile {
String filename;
public void write(ArrayList<?> list) {
Scanner sc;
try {
sc = new Scanner(System.in);
filename = sc.nextLine();
System.out.print("만들 파일 이름을 적어주세요>");
FileWriter writer = new FileWriter(filename+".json");
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(list);
writer.write(jsonString);
writer.flush();
writer.close();
sc.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
읽어온 데이터를 다시 json파일로 저장해주는 방법
package jsonfile;
public class AddJsonData {
public static void main(String[] args) {
ReadJsonFile.Read();
System.out.println(ReadJsonFile.list);
ReadJsonFile.list.remove(0);
System.out.println(ReadJsonFile.list);
ReadJsonFile.list.add(new JsonVO("신사동",
"강남대로152길 14(신사동 513-2)",
"FLASH BAR 동쪽(전신주)"));
System.out.println(ReadJsonFile.list);
ReadJsonFile.list.get(0).set설치주소("바보");
System.out.println(ReadJsonFile.list);
}
}
list에 담긴 VO인스턴스를 삭제하고 추가하는 클래스, 실제 나눠서 해줘도 되나 조금 생각이 필요하여 한번에 작성함
반응형
'JAVA' 카테고리의 다른 글
28일차 22.10.31 (0) | 2022.10.31 |
---|---|
27일차 22.10.28 (0) | 2022.10.28 |
26일차 22.10.27 (0) | 2022.10.27 |
25일차 22.10.26 (0) | 2022.10.26 |
24일차 22.10.25 (0) | 2022.10.25 |
댓글