JsonParser API
웹에서 가져온 Json 데이터를 읽어준다.
라이브러리 추가
maven repository에서 json을 찾아 pom.xml에 넣어준다.
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20211205</version>
</dependency>
JsonParser
JsonParser은 Json 데이터를 읽기만 가능합니다. next를 사용하면 "0" -> "id" ->"Category:\"Tomás Bote Lavado\", Conservatorio" 순서대로 " "안에 있는 내용을 읽습니다.
https://docs.oracle.com/javaee/7/api/javax/json/stream/JsonParser.html

다양한 방법으로 Json을 파싱 해줍니다. String 문자열도 Json 데이터 규칙으로 이루어진 경우 파싱 해줍니다.
IMSLP에서 제공하는 Json 데이터
{
"0"(키 값) : { ("0"의 값)
"id" (키 값): "Category:\"Tomás Bote Lavado\", Conservatorio",( id의 값)
"type": "1",
"parent": "",
"intvals": [
],
"permlink": "https://imslp.org/wiki/Category:\"Tomás_Bote_Lavado\",_Conservatorio"
},
"1": {
"id": "Category:.q, Wulfi",
"type": "1",
"parent": "",
"intvals": [
],
"permlink": "https://imslp.org/wiki/Category:.q,_Wulfi"
},
"metadata": {
"start": 0,
"limit": 1000,
"sortby": "id",
"sortdirection": "ASC",
"moreresultsavailable": true,
"timestamp": 1641791992,
"apiversion": 10
}
}
private String testLink
= "https://imslp.org/imslpscripts/API.ISCR.php?account=worklist/disclaimer=accepted/sort=id/type=1/start=0/retformat=json";
//웹에서 Json 데이터를 가져올 경우 URL을 통해 값을 전부 가져와 준다.
public String connectToIMSLP() throws Exception {
// TODO Auto-generated method stub
URL url = new URL(testlink);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
String result = bufferedReader.readLine();
return result;
}
public ScoreMetaData scoreMetaDataExtract() throws Exception {
// metadata 라는 키값을 받음
JSONObject metadata = (JSONObject) parser().get("metadata");
Map<String, String> map = (Map) metadata.clone();
//키값안에 키값들
String start = String.valueOf(map.get("start"));
String limit = String.valueOf(map.get("limit"));
String sortby = String.valueOf(map.get("sortby"));
String sortdirection = String.valueOf(map.get("sortdirection"));
String moreseltsavilable = String.valueOf(map.get("moreresultsavailable"));
String timestamp = String.valueOf(map.get("timestamp"));
String apiversion = String.valueOf(map.get("apiversion"));
return new ScoreMetaData(Integer.valueOf(start), Integer.valueOf(limit), sortby, sortdirection,
Boolean.valueOf(moreseltsavilable), Long.valueOf(timestamp), Integer.valueOf(apiversion));
}
// 이렇게 만들 필요는 없다.
private JSONObject parser() throws ParseException {
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse("값");
// jsonObject.size() => 매핑된 키값들의 사이즈를 반환해 줍니다.
return jsonObject;
}

값 안에 있는 내용을 Map<key,value> 형태로 매핑됩니다.
예) {key="0" : value ={ "id": "....", "key" : "value" ....}}
{key="1" : value ={ " key " : " value " , ....}}
jsonObject.size() => 매핑된 키값들의 사이즈를 반환해 줍니다.
jsonObject.get("0") => 을 한다면 예시에 있는 값 그대로 Map<key, value> 형식으로 반환해줍니다.
jsonObject.clone() => hashmap 을 반환해 줍니다.
JSONObject
위에 있는 코드에서 JSONObject를 사용했는데 Jsonparser은 데이터를 하나하나 읽는다면 JSON값을 매핑해준다.
읽은 값은 Object 값이나 Collection 또는 map으로 매핑된다.
private JSONObject parser() throws ParseException {
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject) jsonParser.parse(scoreOriginalList);
return jsonObject;
}
https://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html