Android Studio

[Android Studio] Json 데이터 파싱

건휘맨 2024. 6. 11. 12:58

안드로이드 스튜디오에서 "parsing(파싱)"은 일반적으로 데이터를 분석하고 필요한 정보를 추출하는 과정을 의미

 

일반적으로 네트워크 요청을 통해 가져온 데이터를 처리하는 과정으로 구현

주로 JSONObject 또는 JSONArray 클래스를 사용하여 JSON 데이터를 파싱

 // 1. request queue 를 만든다.
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);

        // 2. request 를 만든다. => 응답 데이터의 JSON 형식을 먼저 확인한다.
        JsonObjectRequest request = new JsonObjectRequest(
       			// 가져올 방식
                Request.Method.GET,
                // URL
                "https://block1-image-test.s3.ap-northeast-2.amazonaws.com/posting.json",
                // 보낼 데이터 X => null
                null,
                // 성공했을때 받아온 데이터 처리
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        progressBar.setVisibility(View.GONE);

                        // response에 데이터가 있으니 이 데이터를 Parsing
                        try {
                            JSONArray dataArray = response.getJSONArray("data");
                            // 하나씩 꺼내서 메모리에 객체 생성하고
                            // 여러 개니까 어레이리스트에 저장
                            // 모든 데이터를 전부 저장하고 나면 화면에 표시
                            for(int i=0; i<dataArray.length(); i++){
                                JSONObject data = dataArray.getJSONObject(i);
                                int id = data.getInt("id");
                                int userId = data.getInt("userId");
                                String title = data.getString("title");
                                String body = data.getString("body");

                                Posting posting = new Posting(id, userId, title, body);
                                postingArrayList.add(posting);
                            }

                            adapter = new PostingAdapter(MainActivity.this, postingArrayList);
                            recyclerView.setAdapter(adapter);

                        } catch (JSONException e) {
                            Toast.makeText(MainActivity.this,
                                    "파싱 에러",
                                    Toast.LENGTH_SHORT).show();
                            Log.i("ACTION MAIN", e.toString());
                            return;
                        }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        progressBar.setVisibility(View.GONE);

                        Toast.makeText(MainActivity.this,
                                "네트워크 통신 에러",
                                Toast.LENGTH_SHORT).show();
                        Log.i("ACTION MAIN", volleyError.toString());
                    }
                }
        );

        // 3. 만든 request 를 queue 에 넣어준다.
        queue.add(request);