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

+ Recent posts