Android Studio) XML, JSON 데이터 파싱

chaeyoung·2023년 1월 19일
0

Android Studio

목록 보기
12/13
post-thumbnail

XML 파싱

서버와 데이터가 통신할 때 수신하는 문자열 데이터는 대부분 xml, json이다.

DOM 파서

  • 파싱 방법 3가지
    • DOM 파서( = OOP방식)
      • XML 각 구성요소를 객체로 만들고 객체간 계층구조로 만들어 데이터 추출하는 방식
      • DocumentBuilderFactory factory = DocumentBulderFactory.newInstance();
         DocumentBuilder builder = factory.newDocumentBuilder();
         Document doc = builder.parse(inputStream, null);
        • DocumentBuilder = 파서
        • DocumentBuilder의 parse() 함수로 XML을 파싱
        • InputStream으로 읽히는 XML데이터 파싱

    • SAX 파서( = event방식)
      • 객체 없이 단순히 이벤트만 발생시켜 등록된 이벤트 행들러 함수를 호출해는 역할
      • Element태그의 이벤트 핸들러를 등록시키면 순서대로 해석 후 만난 이벤트 핸들러 함수 호출
      • RootElement root = new RootElement("current");	// 루트 태그
        // 하위 태그
        Element cityElement = root.getChild("city");
        Element tempElement = root.getChild("temperature");
        // 파싱함수
        cityElement.setStartElementListener(new StartElementListener(){
        	// city 태그를 만나면 위의 start() 함수를 자동으로 호출해줌
        	cityView.setText(attributes.getValue("name");
        }
        // 이벤트 핸들러 함수 호출
        Xml.parse(inputStream, Xml.Encoding.UTF-8, root.getContentHandler());

    • Pull 파서( = 이벤트 중심)
      • SAX파서와 동일
        • 차이: SAX는 XML 문서를 끝까지 파싱, Pull은 특정위치까지 파싱 후 계속할지 여부 제어가능
        • xmlPullParser parser = Xml.newPullParser();
          // setInput()에 InputStream을 매개변수로 주면 파싱 시작
           parser.setInput(inpputStream, null);
           int eventType = parser.getEventType();
           // 파싱 조건문
           while(eventType != XmlPullParser.END_DOCUMENT){	// 문서 파싱끝난다면
           	String name = null;
               if(eventType == XmlPullParser.START_TAG){
               	name = parser.getName();
                   if(name.equals("city"))
                   	// ..
                   else if(name.equals("temperature")
                   	// ..
               }
               // 다음 이벤트 발생
               eventType = parser.next();
           }

Json 파싱

  • JSONObject 클래스 + JSONArray 클래스 이용

    • JSONObject: JSON의 {]로 묶이는 부분의 내용을 표현

    • JSONArray: JSON의 [ ]로 묶이는 부분의 내용을 표현

    • [ ]는 {}을 여러개 포함하는 형태, {} 1개당 JSONObject의 객체,
      객체 여러개 담는 객체 = JSONArray

    // 파싱할 JSON문자열 대입하면 최상위 객체가 만들어짐
    JSONObject root = new JSONObject(json);
    
    // getString(): 데이터 얻기
    String name = roog.getString("name")
    JSONObject main = roog.getJSONObject("main")
    String temp = main.getString("temp")
    
    JSONArray array = root.getJSONArray("weather");
    JSONObject arrayItem = array.getJSONObject(0);

0개의 댓글