본문 바로가기
IT 개발/안드로이드개발

[안드로이드] JSON 파싱 - JsonArray 가져오기

by 만능이되고픈 잡캐 2018. 10. 12.


[안드로이드] JSON 파싱 - JsonArray 가져오기


JSON데이터를 가지고 오게되면 JSONObject로만 오는 경우는 드뭅..아니 거의 없습니다.

JsonArray를 통해 감싸져서 Array형태로 오기때문에 우리는 JsonArray를 풀어서 데이터들을 사용하기 편하게 저장해야 합니다.

그래서 오늘은 JsonArray를 어떻게 파싱하는지 알아보려고 합니다.






먼저, String으로 쭈욱- 받아온 데이터를 JSonArray 형태로 바꾸어 줍니다.


str - 받아온 Json Ruw한 값

jsonArray = new JSONArray(str);




JsonArray에 있는 Object를 하나씩 꺼내오기 위해 for문을 이용해 JsonObject를 꺼내옵니다.

for(int i = 0 ; i<jsonArray.length(); i++){
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    String color = jsonObject.getString("color");
    String number = jsonObject.getString("number");
    String string = jsonObject.getString("string");
    String bool = jsonObject.getString("boolean");
    colorList.add(color);
    stringList.add(string);
    numberList.add(number);
    boolList.add(bool);
}





전체소스는 다음과 같습니다.

저는 그냥 테스트로 받아온 걸 확인하기위해 ArrayList에 받은걸 바로 toString()으로 Text로 뿌렸어요.

원하는 타입대로 가공하셔 쓰시면 될 것 같아요.


[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:text="JsonArray 읽기"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/txtResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>



[MainActivity.java]

public class MainActivity extends AppCompatActivity {

    private String str = "[{\"boolean\":\"true\",\"color\":\"#82b92c\",\"number\":\"123\",\"string\":\"Hello World\"}," +
            "{\"boolean\":\"false\",\"color\":\"#823333\",\"number\":\"2233\",\"string\":\"Hello World2\"}," +
            "{\"boolean\":\"true\",\"color\":\"#222b92c\",\"number\":\"12333\",\"string\":\"Hello World3\"}]";

    private ArrayList<String>colorList;
    private ArrayList<String>stringList;
    private ArrayList<String>numberList;
    private ArrayList<String>boolList;
    private JSONArray jsonArray;
    private Button button1;
    private TextView txtResult;

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

        button1 = (Button)findViewById(R.id.button1);
        txtResult = (TextView)findViewById(R.id.txtResult);
        colorList = new ArrayList<>();
        stringList = new ArrayList<>();
        numberList = new ArrayList<>();
        boolList = new ArrayList<>();

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                jsonRead();
            }
        });
    }

    private void jsonRead() {
        try {
            jsonArray = new JSONArray(str);
            for(int i = 0 ; i<jsonArray.length(); i++){
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String color = jsonObject.getString("color");
                String number = jsonObject.getString("number");
                String string = jsonObject.getString("string");
                String bool = jsonObject.getString("boolean");
                colorList.add(color);
                stringList.add(string);
                numberList.add(number);
                boolList.add(bool);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        txtResult.setText(colorList.toString() + "\n" + stringList.toString() + "\n" + numberList.toString() + "\n" + boolList.toString());
    }
}


[구현사진 및 영상]