본문 바로가기
SW - 안드로이드

안드로이드스튜디오 스터디 _ 네트워킹 - (웹으로 요청하기) JSON 이해하기

by 상승남 2019. 1. 6.
728x90
반응형

본 글은 네이버 edwith 안드로이드 부스트코스 과정을 듣고학습내용을 반복 및 복습 학습의 장으로서 메모하고자 합니다.
저는 코딩 강의를 들으면서 듣지만 이해가 안되며 들리지 않아금방 졸리게 되어 지속적으로 공부하기가 힘들었습니다.
가장 큰 이유는 강사분이 말씀하시는 언어 및 단어의 해석자체가 안되기 때문이라고 생각하였습니다.
그래서 모든 설명을 일반적인 언어로 변화 하여 알기 쉽게하여저같은 비전공자 및 디자이너가 쉽게 이해할 수 있는 수준의 자료로만드는 것이 목표 입니다.

1) JSON 이해하기

 
 

들어가기 전에

웹서버로부터 응답을 받았을 때 응답 데이터의 포맷이 JSON이라는 포맷으로 되어 있는 경우가 많습니다.

예전에는 XML인 경우도 있고 다른 포맷으로 된 경우도 있었으나 요즘에는 JSON이 대부분입니다.

그렇다면 이 JSON 포맷은 어떤 형태이길래 이렇게 많이 사용하는 걸까요?

기본적인 JSON 포맷에 대해 이해해봅시다.

 

 


학습 목표

  1. JSON 포맷의 형태를 이해해봅시다.
  2. JSON 포맷 안에 배열 형태로 데이터를 넣어두는 방법을 설명해봅시다.

 

 


핵심 단어

  • JSON
  • 자바스크립트 객체와 배열
 

 

1) JSON 은 무엇일까?

 

JSON (JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 

이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다. JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999의 일부에 토대를 두고 있다. 

JSON은 완벽하게 언어로 부터 독립적이지만 C-family 언어 - C, C++, C#, Java, JavaScript, Perl, Python 그외 다수 - 의 프로그래머들에게 친숙한 관습을 사용하는 텍스트 형식이다. 

이러한 속성들이 JSON을 이상적인 DATA-교환 언어로 만들고 있다.

JSON은 두개의 구조를 기본으로 두고 있다:

  • name/value 형태의 쌍으로 collection 타입. 다양한 언어들에서, 이는 object, record, struct(구조체), dictionary, hash table, 키가 있는 list, 또는 연상배열로서 실현 되었다.
  • 값들의 순서화된 리스트. 대부분의 언어들에서, 이는 array, vector, list, 또는 sequence로서 실현 되었다.

이러한 것들은 보편적인 DATA 구조이다. 사실상 모든 현대의 프로그래밍 언어들은 어떠한 형태로든 이것들을 지원한다. 프로그래밍 언어들을 이용하여 호환성 있는 DATA 형식이 이러한 구조들을 근간에 두고 있는 것은 당연하다.

JSON 에서, 이러한 형식들을 가져간다:

object는 name/value 쌍들의 비순서화된 SET이다. object는 

{

 

(좌 중괄호)

로 시작하고 

}

 

(우 중괄호)

로 끝내어 표현한다. 각 name 뒤에 

:

 

(colon)

을 붙이고 

,

 

(comma)

로 name/value 쌍들 간을 구분한다.

 

JSON 사용처

 

일반적으로 웹서버에서 전송을 해주는 데이터 포맷을 요즘에는 JSON을 많이 사용해준다.상당히 많은 곳에서 JSON으로 통일되어 있다.
안드로이드에서는  JSON 문자열이 넘어오면 그 문자열 데이터를 자바 객체로 바꿔주는 역할을 하는 라이브러리를 여러가지가 있습니다.그중 구글쪽에서 구성을 한 것이 GSON이라고 부른다.
오픈API 사용하기
오픈 API를 사용하기 위해선 KEY값이 필요하여 등록을 해주어야 된다.일반적으로 개발자를 등록하여 KEY를 발급받아 그 KEY값을 대입하여 준다.
오픈 API 데이터를 받아 GSON을 거쳐 자바 객체로 바꾸는 과정을 거칠 수 있다.
MainActivity.java
MainActivity.java에 아래와 같이 오픈 API 주소를 추가를 해준다.
String url = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=430156241533f1d058c603178cc3ca0e&targetDt=20120101
public class MainActivity extends AppCompatActivity {

 TextView textView;


 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 textView = (TextView) findViewById(R.id.textView);

 Button button = (Button) findViewById(R.id.button);

 button.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {

 sendRequest();

 }
 });


 if (AppHelper.requestQueue == null) {
 AppHelper.requestQueue = Volley.newRequestQueue(getApplicationContext());

 }

 }

 public void sendRequest() {

// String url = "http://www.google.co.kr";

 String url = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=430156241533f1d058c603178cc3ca0e&targetDt=20120101 ";

 StringRequest request = new StringRequest(
 Request.Method.GET,
 url,
 new Response.Listener<String>() {
 @Override
 public void onResponse(String response) {
 println("응답 ->" + response);

 }
 },
 new Response.ErrorListener() {
 @Override
 public void onErrorResponse(VolleyError error) {

 println("에러 -> " + error.getMessage());

 }
 }
 ) {
 @Override
 protected Map<String, String> getParams() throws AuthFailureError {
 Map<String, String> params = new HashMap<String, String>();

 return params;
 }
 };

 request.setShouldCache(false); //매번 받은 결과를 그대로 보여주기 위한 기능

 AppHelper.requestQueue.add(request);

 println("요청 보냄.");

 }


 public void println(String data) {
 textView.append(data + "\n");

 }
}

 

build.gradle(Module: app)
GSON을 사용하기 위해선 build.gradle에다가 아래와 같은 코드를 추가 해준다.
implementation 'com.google.code.gson:gson:2.8.2'

dependencies {
 implementation fileTree(dir: 'libs', include: ['*.jar'])
 implementation 'com.android.support:appcompat-v7:27.1.1'
 implementation 'com.android.support.constraint:constraint-layout:1.1.3'
 testImplementation 'junit:junit:4.12'
 androidTestImplementation 'com.android.support.test:runner:1.0.2'
 androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

 implementation 'com.android.volley:volley:1.1.0'
 implementation 'com.google.code.gson:gson:2.8.2'

}
 

JSON이라는 응답을 받아 자바 객체로 만들기 위해선

자바객체는 클래스가 있어야 자바객체를 만들 수 있다. 
그렇기 때문에 아래와 같이 안드로이드 스튜디오에서 
별도의 클래스를 생성해 준다.

 

 

 
public class MovieList {

 
 //MovieList라고 하는 클래스는 응답을 객체로 만들었을때의 결과 로 사용해준다.


}
 
 
GSON으로 파싱하기 
파싱이란? JSON문자열을 해석해서 자바객체로 만들어 주는 과정이다.
그것을 GSON이 처리해준다.
 
 

 

반응형

댓글