[Java] JSON/XML handling

나르·2021년 7월 11일
0

JAVA

목록 보기
6/18
post-thumbnail

📖 JSON

JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. Object, Array, Key-Value 형태로 이루어져 있으며 String, Int, Long, Boolean 등의 타입을 지원합니다.
네트워크를 통해 데이터를 주고받는데 자주 사용되는 경량의 데이터 형식으로,일반적으로 웹 어플리케이션에서 데이터를 전송할 때 사용합니다.

Object는 { }(curly brace)로 감싸여 있는 것을 말합니다.

{
  "key":"value",
  "key":"value",
   ...
}

Array는 [ ](square bracket)으로 감싸여 있는 것을 말합니다.

{
  "objects":[
    	{
    	  "key":"value",
  	  "key":"value"
        },
        {
    	  "key":"value",
  	  "key":"value"
        }
    ...
    ]
   ...
}

📘 json handling library

Java에서 JSON 데이터를 다룰 때 주로 사용하는 라이브러리는 json-simple, Googel GSON, Jackson 등이 있습니다.


빅데이터처리와 같이 주로 큰사이즈의 JSON을 처리해야한다면 Jackson을, 마이크로 서비스와 분산아키텍처 설정 등과 같이 작은 용량의 많은 json 파일을 처리하는 환경이라면 GSON을 추천합니다.
대용량과 소용량 모두를 다양하게 처리하는 환경이라면 양쪽에서 2순위를 기록한 JSON.simple 이 좋을 수도 있습니다.

📘 json parsing

문자열에서 네이티브 객체로 변환하는 것은 파싱(Parsing)이라고 합니다. 네트워크를 통해 전달할 수 있게 객체를 문자열로 변환하는 과정은 문자열화(Stringification)이라고 합니다.

import org.json.*;

String jsonString = ... ; //assign JSON String

// string을 json object로 파싱
JSONObject jObject = new JSONObject(jsonString);

// 단일 객체 json
String str = jObject.getString("strkey");
Boolean boolean = jObject.getBoolean("boolkey");
int i = jObject.getInt("intkey");

// 하위 객체가 여러개인 json
JSONObject object1 = jObject.getJSONObject("obj1");

String title = object1.getString("title");
String url = object1.getString("url");
boolean draft = object1.getBoolean("draft");
    
// Array를 포함한 json
JSONArray jArray = jObject.getJSONArray("objs");

for (int i = 0; i < jArray.length(); i++) {
    JSONObject obj = jArray.getJSONObject(i);
    String title = obj.getString("title");
    String url = obj.getString("url");
    boolean draft = obj.getBoolean("draft");
      
}

javascript에서는 XMLHttpRequest로 불리는 API를 사용합니다.

// 변수로 둘 JSON의 URL을 가져옴
var requestURL = 'https://...';

// XMLHttpRequest 생성자로부터 request 인스턴스를 생성
var request = new XMLHttpRequest();
 
// open() 메소드로 새로운 요청 생성, 리턴타입 지정 후 요청을 보냄
request.open('GET', requestURL);
request.responseType = 'json';
request.send();

// 응답 결과를 변수에 저장
var superHeroes = request.response;

📖 XML

XML은 플랫폼과 프로그램으로부터 독립적이며 개방된 표준으로 인간과 기계 모두 처리할 수 있는 마크업 언어입니다.

DOM 파서는 XML을 파싱 하여 메모리 상에 XML 구조에 대응하는 객체의 트리를 유지합니다.
트리로 구성되어 있기 때문에 구조를 파악하기 쉬운 방식이지만, 읽는 XML 크기가 클 때는 트리도 커지기 때문에 메모리를 대량으로 소비한다는 단점이 있습니다.

📘 XML parser

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;


public static void main(String[] args) {

    String url = ... ;
    File xmlFile = ... ;
    
    // 빌더 생성
    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = builderFactory.newDocumentBuilder();
        
    // XML 문서 혹은 url을 파싱해서 Document 객체 변환
    Document document = builder.parse(xmlFile or url);
        
    // 텍스트 정규화
    document.getDocumentElement().normalize();
        
    // XML 데이터 중 태그의 내용을 가져옴
    NodeList tagList = document.getElementByTagName("tagname");
        
    // 태그 리스트를 하나씩 돌면서 값을 가져옴
    for (int i = 0; i < tagList.getLength(); ++i) {
        // 속성 값 가져오기.
        String name = tagList.item(i).getAttributes().getNamedItem("attr").getNodeValue();
            
        // 태그의 하위 노드(태그)들을 가져옴
        NodeList childNodes = tagList.item(i).getChildNodes();
        for (int j = 0; j < childNodes.getLength(); ++j) {
                
            if ("node".equals(childNodes.item(j).getNodeName()) {
                // do somthing...
            } 
            if ("node2".equals(childNodes.item(j).getNodeName()) {
                // do somthing...
            }
        }
    }
profile
💻 + ☕ = </>

0개의 댓글