이 글에서는 Java에서 JSON 파일을 문자열(String) 변수로 읽어오는 방법을 알아봅니다. 이 기법은 특히 API 테스트 시 엔드포인트에 JSON 페이로드를 POST 요청으로 전송해야 할 때 매우 유용합니다.
JSON 페이로드를 미리 파일로 저장해 두고, 실행 시점에 해당 파일을 문자열로 읽어와 POST 요청의 본문(body)으로 활용하는 방식입니다.
JSON 파일을 문자열로 읽기
먼저 다음 경로에 JSON 파일이 있다고 가정해 보겠습니다.
src/test/resources/myFile.json
{
"name":"David",
"age":30,
"hobbies":["Football","Cooking","Swimming"],
"languages":{"French":"Beginner","German":"Intermediate","Spanish":"Advanced"}
}
이제 아래와 같은 Java 코드를 사용하면 위 JSON 파일을 문자열 형태로 그대로 읽어올 수 있습니다.
import java.nio.file.Files;
import java.nio.file.Paths;
public class ReadJsonAsString {
public static void main(String[] args) throws Exception {
String file = "src/test/resources/myFile.json";
String json = readFileAsString(file);
System.out.println(json);
}
public static String readFileAsString(String file) throws Exception {
return new String(Files.readAllBytes(Paths.get(file)));
}
}
실행 결과
{
"name":"David",
"age":30,
"hobbies":["Football","Cooking","Swimming"],
"languages":{"French":"Beginner","German":"Intermediate","Spanish":"Advanced"}
}
Files.readAllBytes() 메서드는 지정된 경로의 파일 전체를 바이트 배열로 읽어온 뒤, new String() 생성자를 통해 문자열로 변환합니다. 간단하지만 파일이 클 경우 메모리를 많이 사용할 수 있다는 점은 참고하세요.
Java 11 이상이라면: readString() 메서드
Java 11부터는 Files 클래스에 readString() 메서드가 추가되어 한 줄로 더 간결하게 처리할 수 있습니다.
import java.nio.file.Files;
import java.nio.file.Paths;
public class ReadJsonAsString {
public static void main(String[] args) throws Exception {
String json = Files.readString(Paths.get("src/test/resources/myFile.json"));
System.out.println(json);
}
}
파일의 문자 인코딩을 명시적으로 지정하고 싶다면 Files.readString(path, StandardCharsets.UTF_8)처럼 인코딩 정보를 함께 전달하는 것이 좋습니다. 이렇게 읽어온 JSON 문자열은 REST Assured나 HttpClient 등을 이용한 API 테스트에서 요청 본문으로 바로 사용할 수 있습니다.