sitelink1 http://blog.naver.com/pajamasi/220554189537 
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

자바 프로그래밍을 하다가 보면 json , xml 파싱을 해야 할 일이 생길 때가 있습니다.

 

그렇다면 궁금해지는게 xml 이란? json 이란? 뭐지 대체??  궁금한점이 생깁니다.

?

이러한 녀석들은 주로 사용되는곳이  내가 만든 데이터가 아닌 어떠한 일종의 서버로 부터 데이터를 받아 올 때 사용하게 되는데,

 

위와 같은 궁금점을 해결하고자 요녀석들을 설명 하고자 합니다.

 

XML 이란?

 

XML(Extensible Markup Language)은 W3C에서 다른 특수 목적의 마크업 언어를 만드는 용도에서 권장되는 다목적 마크업 언어이다. XML은 SGML의 단순화된 부분집합이지만, 수많은 종류의 데이터를 기술하는 데 적용할 수 있다. XML은 주로 다른 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다.

 

출처 : 위키 백과

 

매우 친절 하고도 정확하게 설명이 되어 있습니다. 중요한점만 짚어보면

 

1. HTML 의 한계를 극복하고자 나왔다.

2. 사용자 정의 TAG 가 가능하다

3. 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받는다.

 

 

까지 겠네요.

 

웹이 발달하게 되면서, 위에서는 연결된 시스템끼리 데이터를 주고 받는다. 라고 되어 있는데 조금더 쉽게 생각하자면 이종간의 시스템, 즉  C++ <-> JAVA(JSP), C <-> JAVA , JAVA <-> PHP (C) 끼리 데이터를 주고 받고 싶다고 하자. 초기에는 얘네들을 바이너리 형태로 표준을 맞춰서 보냈습니다. 지금도 소켓 통신에서는 이렇게 사용하고 습니다.

 

프로그래밍을 C 언어와 C++, JAVA, C#을 해보신 분들은 알겠지만 C 에서는 "문자열" 을 표현하기가 조금 까다 롭습니다. 특히나 OS 운영체제, 언어에 따라서 인코딩 방식이 달라 깨지는 현상이 많습니다. 간단하게만 봐도, c언어에서는 char는 1byte  , java에서는 2byte 이니까요. 이런 불편함에서 시작되지 않았나 싶습니다.

 

그렇게 하다보니 개발자들이, 그럼 특정한 form 을 가지고 통신을 하자. 라고 해서 사용자 정의 태그가 가능한 XML이 등장 하게 됩니다.

 

1. HTML 의 한계란?  HTML에서는 정의된 태그만 사용가능 합니다 

예를 들면 <TITLE> <BODY> <HEADER> 등등 기존에 정의된 태그만 가능 하다. 사용자 정의 태그가 불가능 합니다. 

 

2. XML에서는 어떻게 개선을?

 

    

  1. <?xml version="1.0"?>

  2. <학생>

  3.   <이름>파자마시</이름>

  4.   <신상정보>

  5.     <거주지>서울</거주지>

  6.     <학력>학사</학력>

  7.     <전화번호>010-0000-0000</전화번호>

  8.     <ID>PAJAMASI</ID>

  9.     <직업>프로그래머</직업>

  10.   </신상정보>

  11. </학생>

 

이렇게 모양은 HTML 같지만, HTML에 없는 TAG 들을 활용하서 정보들을 담았습니다. 

 

 

3. 이건 어떻게 전송하는데요?

주고 받는 방법은 간단 합니다. .XML 파일에 작성해서 파일을 스트림으로 보내거나  OR 문자열로 보내줍니다. 문자열의 형태가 더 많겠네요 

 

ex) String xml_data = "<?xml version="1,0?>\n <학생>\n < 이름> 파나마시 </이름>  .... .... .....";

 

이런식으로 문자열에 담아서 보내주게 되겠습니다.

어떤 언어에서도 문자열은 지원하기 때문에 굳이 Class나 Object 같은, c언어에는 없지만, 문자열로 준다면 거기에 맞춰서 개발자가 구조체로 정의해서 사용하면 어떠한 언어에서도 동일하게 데이터를 만들 수 있게 되었습니다.

 

4. xml 파싱은 어떻게?

해당 내용은 제 블로그에 있습니다 xml 로 검색 해주세요. 여기서 개념만 설명 할게요 ;; ㅎ

 

 

 

5. 그럼 JSON이랑 XML 차이점은?

여기서 이제 역사를 다시 거슬러 올라 갑니다. XML 이 나오자 사람들은 열광했습니다. (아마도?) 이종간의 

시스템에서 일정한 기준을 두고 데이터 통신이 쉬워졌습니다. 그런데 여기서 또 개선할 점이 발견 됩니다.

 

   

  1. <1반>

  2.  <이름>홍길동</이름>

  3.  <이름>강감찬</이름>

  4.  <이름>유관순</이름>

  5. </1반>

  6.  

  7. <2반>

  8.  <이름> ... </이름>

  9.  <이름> ... </이름>

  10.  <이름> ... </이름>

  11. </2반>

 

위와 같은 XML 이 있다고 했을때 "이름" 이라는 항목이 반복 되면서 데이터를 잡아 먹게 됩니다. 웹은 자바스크립트로 많이 사용되었고, 그래서 이러지 말고 우리 문자열로 간단하게 표현할 방법이 없을까? 

 

라고 해서 나온것이 JSON 입니다.

 

JSON(제이슨[1]JavaScript Object Notation)은 속성-값 쌍으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다. 비동기 브라우저/서버 통신 (AJAJ)을 위해, 넓게는 XML(AJAX가 사용)을 대체하는 주요 데이터 포맷이다. 특히, 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.

 

출처 : 위키 백과

 

여기도 설명이 무지무지 잘되어 있습니다. 속성- 값 쌍 으로 이루어진 데이터 오브젝트?? 라고 하는데 

여기서 또 잘 모르는 우리들은 ... 무슨 말이지?? 라고 하지만 JSON을 보면 간단 합니다.

 

여기서는 간단한 JSON을 보겠습니다.

 

 

미리 알면 좋은 JSON TAG 를 보겠습니다. 

 

{ } 일명 괄호 인데, 괄호 안에 있는 녀석들은 객체를 나타냅니다.  "  ,  " 구분자로 각각의 속성(KEY) 값 (VALUE)로 구분 합니다.  그리고 순서는 상관 없습니다. ( json 자체가 map 구조 이기 때문에 자동 정렬이 된다. )

 

jsaon sample : {"sex":true,"name":"홍길동","age":20}

 

json샘플 입니다. 일단 { } 괄호가 보이시나요? 저 부분이 객체를 나타내는 구간 입니다. 상세한 구조는 추후 생성과 파싱에서 설명 하겠습니다.

 

간단한 클래스 

 

  1. class User

  2. {

  3.     String name; // 이름

  4.     int age; // 나

  5.     boolean sex; // true남자 / false 여

  6.     

  7.     

  8.     public User(String name, int age , boolean sex) // 생성자

  9.     {

  10.         this.name = name;

  11.         this.age = age;

  12.         this.sex = sex;

  13.     }

  14. }

 

로 객체를 만들어야 하는데, 데이터는 서버에 있고, 서버로 부터 데이터를 받는다. 라고 한다면?? 

나는 java 언어 인데 서버는 php 이다. 어떻게 통신하지?? 라고 할때 JSON으로 하는것 입니다.

 

서버에 "홍길동" 을 요청 하면 서버는 응답으로 문자열에 

 

String response = "{"sex":true,"name":"홍길동","age":20}"; 

 

을 담아서 문자열을 리턴 해주면, 우리는 이제 json 데이터로 부터 name, age, sex 를 파싱해서 

 

 

User user = new User(name, age, sex); 로 객체를 만들어서 추가 하면 됩니다.

 

이렇게 하면 PHP (C) 서버로 부터 JAVA (JSP), ANDROID 와도 데이터(오브젝트) 통신이 가능 한 것 입니다.

 

 

 

자 그럼 위로 다시 돌아가서 , <이름> 이 반복되는거랑 무슨 상관이죠?? 라고 할 수 있습니다.

<이름> 만 보아도 자바로 치면 8byte 입니다. 데이터 빼고 </이름> 닫는 태그까지 하면 16byte 이러한 데이터가 엄청 나게 많다면 낭비 겠죠.. 이걸 JSON 으로 표현 합니다

 

 

여기서 나오는것이 배열로 표현하는데 JSON에서는 [ ]  대괄호로 표현 합니다.

 

자 그럼 조금 복잡 하지만 위의 <이름> 이 겹치는 데이터를 JSON으로 표현해 보겠습니다.

 

String json_data = "{"이름":[{"sex":true,"name":"홍길동","age":20},{"sex":false,"name":"유관","age":20}]}";

 

이렇게 입니다.

 

조금 머리 아프겠지만 뜯어 보겠습니다.

 

 

{"이름":[{"sex":true,"name":"홍길동","age":20},{"sex":false,"name":"유관","age":20}]}

 

바깥쪽에 {} 이것은 객체이다. 그 녀석은 "이름" 이라는 녀석이고 이 녀석에 대한 내용이  : 으로 뒤에 따라 옵니다.

 

그리고 대망에 이건 배열이다 [ ] 라고 대괄호로 구분지어 놓습니다. 그리고 그 안에 각각 객체들이 {}로 들어 있습니다.

구분은 , 로 구분하고 있고 각각의 내용들이 들어 있습니다.

 

앞서서 본 xml 과의 크기를 보면 많이 차이가 나지요?? 데이터를 더 아낄 수 있고 표현은 더 간결하게 되었습니다.

 

이러한 이유로 인해서 XML,  JSON의 차이점을 알아 보았습니다. 그럼 뭘 쓰냐고 묻는다면

 

XML의 경우문서를 열어보면 딱딱 직관적으로 어떠한 데이터가 들어있구나 하고 딱 보입니다.

 

하지만 JSON 의 경우 위에서 간단한 예제이지만, 데이터를 분석 해보려면 일일이  {} [] , : 와 같이 기호를 다 찾아봐야 해서 눈으로 보기에 힘듬점이 있겠네요 ^^;

 

이후에는 파싱하는 방법을 알아 보겠습니다.

 

 

번호 제목 글쓴이 날짜 조회 수
251 Calendar, Date, Format, java.time 패키지 황제낙엽 2017.10.31 108
250 날짜, 시간 문자열 값으로 Date 오브젝트로 만들기 >> SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US) 황제낙엽 2017.10.31 1516
249 시스템 속성(System Property) 클래스를 이용하여 jni 라이브러리 사용하기 황제낙엽 2017.09.22 37
248 Java 실행 옵션들 황제낙엽 2017.08.23 3367
247 HttpsURLConnection 을 사용한 SSL서버 접속 file 황제낙엽 2017.08.02 231
246 서버구동시 주기적으로 동작을 수행하는 스레드를 함께 실행하는 서블릿 황제낙엽 2017.08.02 131
245 HttpURLConnection 사용 샘플( JSP , SERVLET ) 황제낙엽 2017.08.01 254
244 HttpURLConnection 사용하기 황제낙엽 2017.08.01 393
243 [HttpURLConnection] POST로 파라미터 넘기기 황제낙엽 2017.08.01 507
242 HttpURLConnection POST 방식 사용하기 황제낙엽 2017.08.01 370
241 Runtime 클래스를 이용한 윈도우 프로그램 실행 예제 황제낙엽 2017.08.01 113
240 JSON Util (JSON 을 다루기 위해 직접 작성한 유틸 클래스) file 황제낙엽 2017.07.10 461
239 자바 리플렉션(Java Reflection) 간단한 설명 및 사용방법 정리 file 황제낙엽 2017.07.10 135
238 Generate random numbers (Random.java) 황제낙엽 2017.07.02 490
237 쓰레드(Thread)를 중간에 종료시키는 방법 황제낙엽 2017.03.15 5127
236 JSON 라이브러리(API) 종류 황제낙엽 2017.01.18 404
235 [JSON기초04] 자바 JSON 데이터에서 KEY 값 알아오기 (TIP) 황제낙엽 2017.01.18 6641
234 [JSON기초03] 자바 JSON Google Simple JSON을 이용한 간단한 JSON DATA 파싱 황제낙엽 2017.01.18 566
233 [JSON기초02] 자바 JSON Google Simple JSON을 이용한 간단한 JSON DATA 생성 황제낙엽 2017.01.18 111
» [JSON기초01] JSON이란? XML이란? JSON 개념, XML 개념 설명 황제낙엽 2017.01.18 408