현재 보이는 표는 기상청에서 제공하는 자료이다 위 데이터를 이용해서 3가지의 주소를 선택하면 x,y값을 전달하게 돼있다. 그러기 위해서 어떻게 가공을 해야하는지 먼저 결과를 보여주겠다.
위 json 데이터에서
ex) 울산광역시의 x, y 값은102, 84이다.
ex) 울산광역시 중구의 x, y 값은 102, 84이다.
ex) 울산광역시 중구 병영2동의 x, y 값은 102, 85이다.
먼저 .xlsx 파일에서 필요한 열만 따와보자
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class DataTransformer {
public static void main(String[] args) {
String inputFile = "data.txt";
String outputFile = "output.json";
Map<String, Map<String, Map<String, Map<String, Integer>>>> data = new HashMap<>();
try (BufferedReader br = new BufferedReader(new FileReader(inputFile, StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) {
String[] parts = line.split("\t");
String city = parts[0];
String district = parts.length > 1 ? parts[1] : "";
String subdistrict = parts.length > 2 ? parts[2] : "";
int x = Integer.parseInt(parts[parts.length - 2]);
int y = Integer.parseInt(parts[parts.length - 1]);
data.computeIfAbsent(city, k -> new HashMap<>())
.computeIfAbsent(district, k -> new HashMap<>())
.put(subdistrict, Map.of("x", x, "y", y));
}
} catch (IOException e) {
e.printStackTrace();
}
try (FileWriter writer = new FileWriter(outputFile, StandardCharsets.UTF_8)) {
writer.write("{\n");
for (String city : data.keySet()) {
writer.write(" \"" + city + "\": {\n");
Map<String, Map<String, Map<String, Integer>>> districts = data.get(city);
for (String district : districts.keySet()) {
writer.write(" \"" + district + "\": {\n");
Map<String, Map<String, Integer>> subdistricts = districts.get(district);
for (String subdistrict : subdistricts.keySet()) {
Map<String, Integer> coordinates = subdistricts.get(subdistrict);
writer.write(" \"" + subdistrict + "\": {\"x\": " + coordinates.get("x") + ", \"y\": " + coordinates.get("y") + "}");
if (!subdistrict.equals(subdistricts.keySet().toArray()[subdistricts.size() - 1])) {
writer.write(",");
}
writer.write("\n");
}
writer.write(" }");
if (!district.equals(districts.keySet().toArray()[districts.size() - 1])) {
writer.write(",");
}
writer.write("\n");
}
writer.write(" }");
if (!city.equals(data.keySet().toArray()[data.size() - 1])) {
writer.write(",");
}
writer.write("\n");
}
writer.write("}\n");
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 두코드를 한폴더에 넣은뒤에 윈도우 명령창을 띄우고 자바프로그램 컴파일(javac DataTransformer.java) 후 실행해준다(java 클래스네임)
그럼 그 결과로 실제 프로그래밍에 쓰일 output.json 파일이 생성된다.
https://velog.io/@holy38/%EB%82%A0%EC%94%A8-%EC%A7%80%EC%97%AD%EC%84%A0%ED%83%9D-%EC%B6%94%EA%B0%80
날씨 지역추가 기능 설명글 여기에서 쓸 json파일이다.