๐Ÿ“‚ JAVA/์ฃผ์š” ๊ฐœ๋…

Parsing(ํŒŒ์‹ฑ) - CSV, XML, JSON

Amenable 2023. 1. 30. 23:52

  ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜, Parsing(ํŒŒ์‹ฑ) & Parser(ํŒŒ์„œ), Parsing์˜ ์‹ค์ œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

 

1. CSV, XML, JSON ๐ŸŒž

(1) CSV (Comma Separated Value) ๐ŸŒฑ

  CSV๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•„๋“œ๋ฅผ ์‰ผํ‘œ(,)๋กœ ๊ตฌ๋ถ„ํ•œ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋ฐ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋‹ค.

name,age,visitTime
์ตœํ•˜๋Š˜,23,2023-01-28
์ด๊ตฌ๋ฆ„,15,2023-01-29
๊น€์‚ฐ,32,2023-01-30

(2) XML (eXtensible Markup Language) ๐ŸŒณ

XML์€ HTML๊ณผ ๋งค์šฐ ๋น„์Šทํ•œ ๋ฌธ์ž ๊ธฐ๋ฐ˜์˜ ๋งˆํฌ์—… ์–ธ์–ด(text-based markup language)์ด๋‹ค. ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ •์˜ํ•œ๋‹ค. XML ํƒœ๊ทธ๋Š” HTML ํƒœ๊ทธ์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

<visitorResult>
    <visitRange>20230124~20230130</visitRange>
    <visitors>
        <visitor>
            <name>์ตœํ•˜๋Š˜</name>
            <age>23</age>
            <visitTime>2023-01-28</visitTime>
        </visitor>
        <visitor>
            <name>์ด๊ตฌ๋ฆ„</name>
            <age>15</age>
            <visitTime>2023-01-29</visitTime>
        </visitor>
        <visitor>
            <name>๊น€์‚ฐ</name>
            <age>32</age>
            <visitTime>2023-01-30</visitTime>
        </visitor>
    </visitors>
</visitorResult>

(3) JSON (Javascript Object Notation) ๐ŸŒด

  JSON์€ ํ‚ค(Key)์™€ ๊ฐ’(Value)์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์ด๋‹ค.

{
  "visitorResult": {
    "visitRange": "20230124~20230130",
    "visitors": [
      {
        "name": "์ตœํ•˜๋Š˜",
        "age": 23,
        "visitTime": "2023-01-28"
      },
      {
        "name": "์ด๊ตฌ๋ฆ„",
        "age": 15,
        "visitTime": "2023-01-29"
      },
      {
        "name": "๊น€์‚ฐ",
        "age": 32,
        "visitTime": "2023-01-30"
      }
    ]
  }
}

๊ฐ๊ฐ์˜ ํŠน์ง•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  CSV XML JSON
์žฅ์    ์šฉ๋Ÿ‰์ด ๊ฐ€์žฅ ์ž‘์Œ
  CSV๋Š” ์šฉ๋Ÿ‰์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์ฃผ๋กœ ์ด์šฉ์ด ๊ฐ€๋Šฅ
  XML์€ 3๊ฐ€์ง€ ํ˜•์‹ ์ค‘ ๊ฐ€์žฅ ์ง๊ด€์ 
  ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์„œ ์ •๋ณด ํ‘œํ˜„ ์ด์ƒ์˜ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ
  ๋ชจ์–‘๊ณผ ๊ทœ์น™ ์ž์ฒด๊ฐ€ ๋‹จ์ˆœํ•ด์„œ ํƒ€ ์–ธ์–ด์—์„œ๋„ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›€
๋‹จ์    ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋‚ด๋Š”์ง€ ๊ฐ€์‹œํ™”๊ฐ€ ์–ด๋ ค์›€   ์‹ค์ œ ์ „์†กํ•˜๋Š” ์ •๋ณด๋ณด๋‹ค ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋” ์ปค์งˆ ์ˆ˜ ์žˆ์Œ   ์ฝค๋งˆ๊ฐ€ ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜ ์ค‘๊ด„ํ˜ธ๊ฐ€ ์ž˜ ๋ชป ๋‹ซํžˆ๋Š” ๋“ฑ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜์— ์ทจ์•ฝํ•˜๋‹ค.
์ฃผ์š” ์‚ฌ์šฉ์ฒ˜   ๊ฐ„๋‹จํ•œ ํ…Œ์ด๋ธ” ์ž‘์„ฑ ๋˜๋Š” ์ฝ๋Š” ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ   ๋‹จ์ˆœ ๊ฒŒ์ž„ ์˜ต์…˜, ์ง์ ‘ ๋ฐ์ดํ„ฐ ์ˆ˜์ •์ด ์žฆ์€ ๋ถ€๋ถ„์— ์‚ฌ์šฉ   ์„œ๋ฒ„ ํ†ต์‹  REST API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ

 

2. Parsing (ํŒŒ์‹ฑ) & Parser(ํŒŒ์„œ) โ›…

  Parsing์ด๋ž€ ๋ฌธ์„œ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ํƒœ๊ทธ๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ณ  ๋‚ด์šฉ์„ ์ถ”์ถœํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๋ฌธ์žฅ์ด ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ตฌ์„ฑ ์„ฑ๋ถ„์„ ๋ถ„ํ•ดํ•˜๊ณ  ๋ถ„ํ•ด๋œ ์„ฑ๋ถ„์˜ ์œ„๊ณ„ ๊ด€๊ณ„๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋‚ด์šฉ์„ ์–ป๋Š”๋‹ค.

  Parsing์˜ ๊ธฐ๋ฒ•์œผ๋กœ๋Š” XML Parsing๊ณผ JSON Parsing์ด ์žˆ๋‹ค. (CSV์˜ ๊ฒฝ์šฐ์—๋Š” ์ฝค๋งˆ๋กœ ์†์‰ฝ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.) 

  Parser๋ž€ Parsing์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. Parser๋Š” Compiler์˜ ์ผ๋ถ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์›์‹œ ํ”„๋กœ๊ทธ๋žจ์„ ์ฝ์–ด ๋“ค์—ฌ ๊ทธ ๋ฌธ์žฅ์ด ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋‚ด๋Š” Parsing์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

3. XML Parsing ๐ŸŒ‚

  XML Parsing์—๋Š” SAX(Simple API for XML) Parser์™€ DOM(Document Object Model) Parser๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. SAX Parsers๋Š” ๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ํƒœ๊ทธ์˜ ์‹œ์ž‘, ์ข…๋ฃŒ ๋“ฑ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , DOM Parser๋Š” ๋ฌธ์„œ๋ฅผ ๋‹ค ์ฝ๊ณ  ๋‚œ ํ›„ ๋ฌธ์„œ ๊ตฌ์กฐ ์ „์ฒด๋ฅผ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 

  SAX Parser DOM Parser
ํŠน์ง• ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ X
์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ O
์‚ฌ์šฉ์ฒ˜ ์ฝ๊ธฐ ์ „์šฉ XML ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„

  'visitor.xml'๊ณผ Visitor.java๋ฅผ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  SAX Parser์™€ DOM Parser๋ฅผ ์ด์šฉํ•ด์„œ Parsing ํ•ด๋ณด์ž.

<visitorResult>
    <visitRange>20230124~20230130</visitRange>
    <visitors>
        <visitor>
            <name>์ตœํ•˜๋Š˜</name>
            <age>23</age>
            <visitTime>2023-01-28</visitTime>
        </visitor>
        <visitor>
            <name>์ด๊ตฌ๋ฆ„</name>
            <age>15</age>
            <visitTime>2023-01-29</visitTime>
        </visitor>
        <visitor>
            <name>๊น€์‚ฐ</name>
            <age>32</age>
            <visitTime>2023-01-30</visitTime>
        </visitor>
    </visitors>
</visitorResult>
public class Visitor {
	private String name;
	private Integer age;
	private Date visitTime;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Date getVisitTime() {
		return visitTime;
	}
	public void setVisitTime(Date visitTime) {
		this.visitTime = visitTime;
	}
	
	public Date toDate(String date) {
		Date dateObj = null;
		
		SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
		try {
			dateObj = format.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return dateObj;
	}
	
	@Override
	public String toString() {
		return "Visitor [name=" + name + ", age=" + age + ", visitTime=" + visitTime + "]";
	}
}

 

(1) SAX Parser ๐ŸŒต

  SAX Parser๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” DefaultHandler๋ฅผ ์ƒ์†ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  startDocument(), endDocument(), startElement(), endElement(), characters()๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

  ๋˜ํ•œ, SAXParserFactory๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒฉํ† ๋ฆฌ๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์ด์šฉํ•ด์„œ SAXParser๋ฅผ ๋งŒ๋“ ๋‹ค. ๋งŒ๋“ค์–ด์ง„ parser๋ฅผ ์ด์šฉํ•ด์„œ parse๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

public class VisitorSaxParser extends DefaultHandler {

	private final File xml = new File("./visitor.xml");

	private List<Visitor> list = new ArrayList<>();

	private Visitor current;

	private String content;

	public List<Visitor> getVisitor() {
		try {
			SAXParserFactory factory = SAXParserFactory.newInstance();
			SAXParser parser = factory.newSAXParser();
			parser.parse(xml, this);
		} catch (IOException | ParserConfigurationException | SAXException e) {
			e.printStackTrace();
		}

		return list;
	}

	@Override
	public void startDocument() throws SAXException {
		System.out.println("Document Parsing START");
	}

	@Override
	public void endDocument() throws SAXException {
		System.out.println("Document Parsing END");
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		if(qName.equals("visitor")) {
			current = new Visitor();
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if(qName.equals("visitor")) {
			list.add(current);
		} else if(qName.equals("name")) {
			current.setName(content);
		} else if(qName.equals("age")) {
			current.setAge(Integer.parseInt(content));
		} else if(qName.equals("visitTime")) {
			current.setVisitTime(current.toDate(content));
		}
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		this.content = new String(ch, start, length);
	}
}

public class SaxParserTest {
	public static void main(String[] args) {
		VisitorSaxParser handler = new VisitorSaxParser();

	    List<Visitor> visitors = handler.getVisitor();
	    
	    for (Visitor visitor : visitors) {
	        System.out.println(visitor);
	    }
	}
}

// Document Parsing START
// Document Parsing END
// Visitor [name=์ตœํ•˜๋Š˜, age=23, visitTime=Sun Jan 01 00:00:00 KST 2023]
// Visitor [name=์ด๊ตฌ๋ฆ„, age=15, visitTime=Sun Jan 01 00:00:00 KST 2023]
// Visitor [name=๊น€์‚ฐ, age=32, visitTime=Sun Jan 01 00:00:00 KST 2023]

  ๋™์ž‘ ๋ฐฉ์‹์€ ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. startDocument(), endDocument(), startElement(), endElement(), characters()๊ฐ€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์ด๋‹ค. ์•„๋ž˜์˜ ํ‘œ๋ฅผ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์  & ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
<visitorResult>(1)
        ...
        <visitor>(2)
            <name>(2)์ตœํ•˜๋Š˜(3)</name>(4)
            <age>(2)23(3)</age>(4)
            <visitTime>(2)2023-01-28(3)</visitTime>(4)
        </visitor>(4)
        <visitor>(2)
            <name>(2)์ด๊ตฌ๋ฆ„(3)</name>(4)
            <age>(2)15(3)</age>(4)
            <visitTime>(2)2023-01-29(3)</visitTime>(4)
        </visitor>(4)
        ...
</visitorResult>(5)
(1) startDocument()
(2) startElement()
(3) characters()
(4) endElement()
(5) endDocument()

 

(2) DOM Parser ๐Ÿ€

  DOM Parser๋Š” root๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์†ํ•ด์„œ child๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋“ค์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” DOM Tree๋กœ ์ธํ•ด ๋ฌธ์„œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๊ฐ€ Node๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํŒฉํ† ๋ฆฌ๋ฅผ ์‹œ์ž‘์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์€ SAX Parser์™€ ๋น„์Šทํ•˜๋‹ค.

public class VisitorDomParser {
	private final File xml = new File("./visitor.xml");
	private List<Visitor> list = new ArrayList<>();
	
	public List<Visitor> getVisitor() {
		try {
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			
			Document doc = builder.parse(xml);
			Element root = doc.getDocumentElement();
			parse(root);
		} catch(IOException | ParserConfigurationException | SAXException e) {
			e.printStackTrace();
		}
		
		return list;
	}

	private void parse(Element root) {
		NodeList visitors = root.getElementsByTagName("visitor");
		for(int i = 0; i < visitors.getLength(); i++) {
			Node child = visitors.item(i);
			list.add(getVisitor(child));
		}
	}

	private Visitor getVisitor(Node node) {
		Visitor visitor = new Visitor();
		NodeList childs = node.getChildNodes();
		for(int i = 0; i < childs.getLength(); i++) {
			Node child = childs.item(i);
			if(child.getNodeName().equals("name")) {
				visitor.setName(child.getTextContent());
			} else if(child.getNodeName().equals("age")) {
				visitor.setAge(Integer.parseInt(child.getTextContent()));
			} else if(child.getNodeName().equals("visitTime")) {
				visitor.setVisitTime(visitor.toDate(child.getTextContent()));
			}
		}
		
		return visitor;
	}
}

public class DomParserTest {
	public static void main(String[] args) {
		VisitorDomParser parser = new VisitorDomParser();
		List<Visitor> visitors = parser.getVisitor();
		
		for (Visitor visitor : visitors) {
			System.out.println(visitor);
		}
	}
}

// Visitor [name=์ตœํ•˜๋Š˜, age=23, visitTime=Sun Jan 01 00:00:00 KST 2023]
// Visitor [name=์ด๊ตฌ๋ฆ„, age=15, visitTime=Sun Jan 01 00:00:00 KST 2023]
// Visitor [name=๊น€์‚ฐ, age=32, visitTime=Sun Jan 01 00:00:00 KST 2023]

 

4. JSON Parsing ๐ŸŒˆ

  JSON Parsing์€ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๋‹ค. ObjectMapper๋ฅผ ์ด์šฉํ•ด์„œ mapper๋ฅผ ์ง€์ •ํ•ด ์ฃผ๊ณ  ๊ฐ’์„ ์ฝ์–ด์˜จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ฐ’์—์„œ ํ‚ค(Key)๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ’(Value)์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์ง€์ •ํ•œ ํ›„, convertValue๋ฅผ ์ด์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ Visitor ํด๋ž˜์Šค์— ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

public class JsonParser {
	private final File json = new File("./visitor.json");
	private List<Visitor> list = new ArrayList<>();
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
    public List<Visitor> getVisitor() {
        ObjectMapper mapper = new ObjectMapper();

        mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));

        try {
			Map<String, Map<String, Object>> result = mapper.readValue(json, Map.class);
			List<Map<String, Object>> list = (List) result.get("visitorResult").get("visitors");
			for(Map<String, Object> item : list) {
				this.list.add(mapper.convertValue(item, Visitor.class));
			}
		} catch (JsonParseException e) {
			e.printStackTrace();
		} catch (JsonMappingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
        
        return list;
    }
}

public class JsonParserTest {
	public static void main(String[] args) {
		JsonParser parser = new JsonParser();
        List<Visitor> visitors = parser.getVisitor();

        for (Visitor visitor : visitors) {
            System.out.println(visitor);
        }
    }
}

// Visitor [name=์ตœํ•˜๋Š˜, age=23, visitTime=Sat Jan 28 00:00:00 KST 2023]
// Visitor [name=์ด๊ตฌ๋ฆ„, age=15, visitTime=Sun Jan 29 00:00:00 KST 2023]
// Visitor [name=๊น€์‚ฐ, age=32, visitTime=Mon Jan 30 00:00:00 KST 2023]

  XML Parsing์—์„œ ์‚ฌ์šฉํ•œ Visitor Class์— 2๊ฐ€์ง€ ๋ณ€ํ™”๊ฐ€ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ๋Š” JsonParser์—์„œ dateFormat์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— toDate๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ๋Š” @JsonIgnoreProperties(ignoreUnknown = true)๋ฅผ ์„ค์ •ํ•ด ์ฃผ์—ˆ๋‹ค. JSON์€ ๋ชจ๋“  ์š”์†Œ๋ฅผ Parsing ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ Visitor ํด๋ž˜์Šค์—์„œ๋Š” ์„ ์–ธ๋˜์ง€ ์•Š์€ ์š”์†Œ๋ฅผ Parsing ์•ˆ ํ•˜๊ณ  ์‹ถ์€๋ฐ ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด @JsonIgnoreProperties(ignoreUnknown = true)์ด๋‹ค.

@JsonIgnoreProperties(ignoreUnknown = true)
public class Visitor {
	private String name;
	private Integer age;
	private Date visitTime;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Date getVisitTime() {
		return visitTime;
	}
	public void setVisitTime(Date visitTime) {
		this.visitTime = visitTime;
	}
	
	@Override
	public String toString() {
		return "Visitor [name=" + name + ", age=" + age + ", visitTime=" + visitTime + "]";
	}
}

 

[์ฐธ๊ณ ์ž๋ฃŒ]
[JAVA] Parsing์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
๋ฐ์ดํ„ฐ ํฌ๋งท(XML, JSON, CSV)
SAX (Simple API for XML)