기본적으로 .yaml파일을 읽어오는 방법은 2가지가 존재합니다.
1. class를 활용하여 값을 저장하기
2. new Yaml()을 활용해서 map형태로 받아오기
class를 활용하여 가져오기
해당 방식을 사용하기 위해서는 yaml파일에 저장되어 있는 1step의 값들로 이루어진 class가 필요힙니다.
a:
b:
c:
d:
e:
f:
해당 형식으로 이루어진 yaml파일을 읽어오기 위해서는
@Getter
@Setter
class Node{
static A a;
static D d;
public Node(A a, D d){
this.a = a;
this.d = d;
}
}
해당 형식으로 된 class와 A와 D에 해당하는 class에 각각 b,c와 e,f의 값을 저장할 변수가 필요합니다.
new Yaml()을 활용해서 가져오기
해당 기능을 활용해서 구현하기 위해서는 import가 필요합니다.
<!-- https://mvnrepository.com/artifact/org.yaml/snakeyaml -->
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
이후 다음과 같은 형식으로 new Yaml과 같이 가져올 yaml 파일명을 FileReader를 통해 불러오면 됩니다.
Map<String, Object> data = new Yaml().load(new FileReader("test.yaml"));
해당 형식으로 값을 가져오게 된다면
a:
b:
c:
d:
e:
f:
다음과 같은 형식의 yaml의 경우
key : a, value : b, c
key : d, value : e, c
해당 형식으로 key와 value가 저장됩니다.
만약 다음과 같은 형식으로 yaml에서 b의 값들을 가져오고 싶은 경우에는
a:
b:
c:
d:
다음과 같은 형식으로 계속해서 map을 만들어 주는 방식으로 진행이 가능합니다.
Map<String, Object> data = new Yaml().load(new FileReader("test.yaml"));
Map<String, Object> data2 = (Map<String, Object>) data.get("a");
해당 방식이 마음에 안들어 search하고, gpt에 물어보았지만 계속해서 같은 답변만 줘서 확인하지 못하였습니다.
만약 다른 방식이 존재하다면, 댓글 부탁드립니다.
yaml 값 쓰기
yaml을 불러온 후, 값을 읽기까지 하였습니다.
이후 값을 수정한 이후 다시 쓰는 방식에 대해 알아보고자 합니다.
가장 먼저 yaml을 쓰기 전에 style을 지정해야 합니다.
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); //style 지정
options.setIndent(4); // 들여쓰기 설정
Yaml yaml = new Yaml(options); // yaml에 style 저장
해당 형식을 활용해서 사용할 경우, LIST의 경우 "[]"이 아닌 "-" 형식으로, 문자열의 경우 ""가 사라지게 됩니다.
그러나 yaml을 불러오는 데에는 차이점이 없어 무난하게 사용하실 수 있습니다.
yaml.dump(data, new FileWriter("test.yaml"));
지정한 yaml을 다시 저장하기 위해서는 다음과 같은 형식으로 가능합니다.
마지막으로, request로 받은 json을 yaml에 값과 바꾸는 방식 코드입니다.
Map<String, Object> data = new Yaml().load(new FileReader("test.yaml"));
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); //style 지정
options.setIndent(4); // 들여쓰기 설정
Yaml yaml = new Yaml(options); // yaml에 style 저장
Map<String, Object> jsonData = new Yaml().load(yaml.dump(new ObjectMapper().readValue("data", Object.class))); // json 값 읽기
data.put("a", jsonData.get("a")); // 1step "a"밑의 값들을 json으로 받은 데이터로 변경
yaml.dump(data, new FileWriter("test.yaml")); // yaml 파일 수정
'Java' 카테고리의 다른 글
JAVA에서의 Boyer-Moore (0) | 2024.06.23 |
---|---|
객체 비교 (1) | 2024.04.02 |
댓글