JSON이란 기본적으로 Key-Value로 구성된 데이터 타입을 말한다. 그리고 자료형으로는 String, Int, Long, 그리고 Boolean 타입을 지원한다.
미리 참고로 말하자면, spring에서는 부트에 내장된 jackson라이브러리를 사용하면되나, 여기서는 스프링없는 자바코드를 보여주도록 하겠다.
먼저 java에서 json parsing에 필요한 org.json 라이브러리를 다운로드 한다.
JSON 중 key-value, key-Object, key-Array 이 3가지 타입으로 이루어진 JSON파일을 파싱하는 예시를 보여주고자 한다.
JSON파일은 아래와 같다.
파일명 : test.json
{
"nation": "Korea",
"school": {"number1": "school1", "number2": "school2"},
"students": [
{
"id": 1,
"name": "student1",
"class": "I",
"city": "Delhi"
},
{
"id": 2,
"name": "student2",
"class": "II",
"city": "Mumbai"
}
]
}
"nation"키는 일반적인 key-value 형식을 가지고 있고, "school"키는 key-object, "students"는 key-Array형태를 가지고 있다.
json파일이 파일의 형태로 주어졌다 가정하고, java.nio 패키지의 Files 를 통해 아래와 같이 read 한다.
String text = "";
try {
text = new String(Files.readAllBytes(Paths.get("src/JsonParsing/test.json")), StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jObject = new JSONObject(text);
먼저 일반적인 key-value형식 parsing
JSONObject jo = new JSONObject(text);
String nation = jo.getString("nation");
String, int, long, Boolean 등 자료형에 맞게 조회하면 된다.
key-Object 형식으로 주어진 Object를 parsing
JSONObject jo = new JSONObject(text);
JSONObject jo2 = jo.getJSONObject("school");
String number1 = jo2.getString("number1");
String number2 = jo2.getString("number2");
JSONObject타입으로 전체 json데이터를 구한 이후에 동일하게 JSONobject타입으로 json내부의 object객체를 얻어내면된다. 그 이후엔 동일하게 String, int, Boolean 타입에 맞게 데이터 get.
key-Array 형식으로 주어진 Array를 parsing
JSONObject jo = new JSONObject(text);
JSONArray ja = jo.getJSONArray("students");
for (int i = 0; i < ja.length(); i++) {
JSONObject obj = ja.getJSONObject(i);
int id = obj.getInt("id");
String name = obj.getString("name");
String class_name = obj.getString("class");
String city = obj.getString("city");
}
JSONArray 타입으로 get -> for문을 통해 각 index별 JSONObject get -> 자료형별로 get
위 순서로 JSONArray 데이터를 각각의 타입으로 parsing하면 된다.
이상으로 JSON의 3가지 타입의 parsing에 대해 알아 보았다.
'프로그래밍 > java, spring' 카테고리의 다른 글
서블릿방식과 spring MVC 컨트롤러의 json처리 비교 (0) | 2022.12.26 |
---|---|
서블릿의 필요성 (0) | 2022.12.25 |
JPA auto-ddl update는 컬럼 속성을 수정하지 않는다. (0) | 2022.12.14 |
추상클래스와 익명클래스 (0) | 2022.12.03 |
재귀함수의 활용 (0) | 2022.11.27 |